0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-07 13:19:19 +08:00
discourse/lib/content_localization.rb
Natalie Tay 16919c4fd4
UX: Prevent incomplete crawler localization settings (#41297)
This PR makes sure crawler localization URLs only work when anonymous
users can resolve the locale from the URL param. This blocks enabling
the crawler param without that prerequisite and keeps hreflang,
canonical URLs, and crawler link rewriting behind the same guard.

/406195/4
2026-07-01 12:13:22 +08:00

53 lines
2.2 KiB
Ruby
Vendored

# frozen_string_literal: true
class ContentLocalization
SHOW_ORIGINAL_COOKIE = "content-localization-show-original"
# @param scope [Object] The serializer scope from which the method is called
# @return [Boolean] if the cookie is set, false otherwise
def self.show_original?(scope)
return true if scope&.user&.user_option&.show_original_content
return false if scope&.user
scope&.request&.cookies&.key?(SHOW_ORIGINAL_COOKIE)
end
# This method returns true when we should try to show the translated post.
# @param scope [Object] The serializer scope from which the method is called
# @param post [Post] The post object
# @return [Boolean]
def self.show_translated_post?(post, scope)
SiteSetting.content_localization_enabled && post.raw.present? && post.locale.present? &&
!post.in_user_locale? && !show_original?(scope)
end
# This method returns true when we should try to show the translated topic.
# @param scope [Object] The serializer scope from which the method is called
# @param topic [Topic] The topic record
# @return [Boolean]
def self.show_translated_topic?(topic, scope)
SiteSetting.content_localization_enabled && topic.locale.present? && !topic.in_user_locale? &&
!show_original?(scope)
end
# This method returns true when we should try to show the translated category.
# @param category [Category] The category record
# @param scope [Object] The serializer scope from which the method is called
# @return [Boolean]
def self.show_translated_category?(category, scope)
SiteSetting.content_localization_enabled && category.locale.present? &&
!category.in_user_locale?
end
# This method returns true when we should try to show the translated tag.
# @param tag [Tag] The tag record
# @param scope [Object] The serializer scope from which the method is called
# @return [Boolean]
def self.show_translated_tag?(tag, scope)
SiteSetting.content_localization_enabled && tag.locale.present? && !tag.in_user_locale?
end
def self.crawler_locale_param_enabled?
SiteSetting.content_localization_enabled && SiteSetting.content_localization_crawler_param &&
SiteSetting.set_locale_from_param
end
end