従来の多言語 Rails 4 Web サイトでは、重複コンテンツの問題を回避したいと考えています。
Friendly-id と globalize3 を使用して、ウェブサイトを多言語化しました。
これが私の構成です:
クラシック ページ モデル:
extend FriendlyId
friendly_id :title, use: [:slugged, :history]
translates :title, :content, :slug
最初のルート構成:
scope ":locale", /#{I18n.available_locales.join("|")}/ do
my_routes
end
#rails cast solution
match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }, via: :all
match '', to: redirect("/#{I18n.default_locale}"), via: :all
最初のアプリケーション アプリケーション コントローラー構成:
before_action :set_locale
def default_url_options(options = {})
{locale: I18n.locale}
end
private
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
URL の末尾に /the-default-locale を付けずにユーザーにサイトにアクセスしてもらいたいので、次のように構成を変更します。
ルート構成:
#Here I'm trying to avoid /en/content and /content to avoid duplication
match "/#{I18n.default_locale}/*path", to: redirect("/%{path}"), via: :all
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
my_routes
end
#removed the rails cast fallback to default locale
アプリケーション コントローラの構成:
before_action :set_locale
def default_url_options(options = {})
{ :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
end
private
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
言語を切り替えるためのリンク:
#here the French language is the default locale
<%= link_to_unless_current t("English"), locale: "en" %>
<%= link_to_unless_current t("French"), locale: nil %>
質問:
1- わかりやすい ID と翻訳されたスラッグを使用して、mywebsite.com/mon_contenu と mywebsite/en/my_content にアクセスできます。しかし、すでに mywebsite.com/mon_contenu にアクセスしていて、英語のスイッチをクリックすると、英語のコンテンツで mywebsite.com/en/mon_contenu になりますが、URL は英語のスラッグに切り替わりません。
これは重複コンテンツと見なされますか? はいの場合、どうすれば回避できますか?
2- グローバル化すると、コンテンツが翻訳されていない場合、デフォルトのロケール コンテンツが表示されます。したがって、mywebsite.com/mon_contenu と mywebsite.com/en/my_content は、翻訳が行われていなければ、同じコンテンツを同じ言語で表示できます。
また、これは重複と見なされますか?
考慮されるオプション
たとえば、robot.txt を使用して一部のルートを無効にし、デフォルトのロケールのみをインデックスに登録できるようにしますか?
canonical タグを使用していますが、レイアウトで簡単に設定する方法がわかりません
このような状況をどのように管理していますか?
ヘルプ/アイデア/コメント/アドバイスはいつでも大歓迎です!
いつもお世話になっております。