Rails 4 i18n,如何转换子域用于区域设置的路由

2024-05-14

我正在使用子域来确定 Rails 4 网站中的区域设置。我完全按照我想要的方式使用区域设置切换器,但现在我需要翻译路线,并且我不确定继续的最佳方法。

我看过https://github.com/kwi/i18n_routing https://github.com/kwi/i18n_routingi18n 路由 gem 但这不适用于子域,它似乎通过添加 /locale 来更改路径,这不是我需要的。

其他的 gem 似乎在 Rails 4 中已经过时了。

Edit

基本上我希望能够使用相同的视图助手,但更改网址以使用所选子域反映的任何语言。这只是关于路线翻译。

我有可以工作的特定于语言的模板,并且可以生成特定于语言的导航模板,但我真的不想担心更改 erb 路径和 url erb 标签

End edit

来自routes.rb的示例

scope module: 'countries', shallow: true do

  get 'south_american', to: 'south_america#index', as: :south_america
  scope module: 'south_america' do
    get 'south-america-weather', to: 'weather#index', as: :south_america_weather
    get 'south-america-gps-maps', to: 'gps#index', as: :south_america_gps
    get 'south-america-accommodation', to: 'hotels#index', as: :south_america_hotels
    get 'south-america-vacations', to: 'vacations#index', as: :south_america_vacations
    get 'south-america-facts', to: 'facts#index', as: :south_america_facts
  end

使用 South_america_hotels_path 作为示例将生成一个 url

南美洲住宿

这很棒,但是我该如何翻译它,以便当我在西班牙子域 South_america_hotels_path 上时将生成以下网址

南美洲奥特尔莱斯

UPDATE

另外,这对于 url 而不仅仅是路径如何工作,以便 South_america_hotels_url 将生成

en.some_site/南美洲住宿

当在西班牙子域上时我会得到

es.some_site/南美洲酒店

对于所涉及的不同区域设置等等。

我很高兴使用 yml 文件来翻译 url,或者在 paths.rb 文件中定义其他路由,这两种方法都是一个选项,但我更愿意在 paths.rb 中定义 url,但我无法找到为基于子域的相同 :as path/url 选项提供特定于语言的 url 的方法。

针对之前的回复进行更新和进一步澄清。

更改 url 不是一个选项,它们需要匹配现有的 url。我只需要知道如何从视图助手的角度翻译它们,而不必更改视图助手。


EDIT:

这个宝石是我推荐的方法。支持多种语言,无需重新加载路由(我的示例没有)。您只需更改很少的内容,但它比下面的代码更加一致。路线翻译器 https://github.com/enriclluelles/route_translator

原始答案(不起作用):

This is what have worked for me, you can try it out, in your routes for example you can put:

AppName::Application.routes.draw do
    get "/#{I18n.t("index")}", :to => "pages#index", :as => "index"
    get "/#{I18n.t("contact")}", :to => "pages#contact", :as => "contact"
end

当您运行应用程序时,这将为您提供默认区域设置中的路线,但是在运行时,当您更改区域设置时,您需要重新绘制路线才能获取新区域设置的路线。

I18n.locale = :es #different locale
AppName::Application.reload_routes!

假设您的 default_locale 是:en,此示例将从以下位置获取第一条路线:

en:
  index: "index-in-english"
  contact: "contact-in-english"

当应用程序重新加载路线时,它将从您的新语言环境中获取翻译,在本例中来自

es:
  index: "index-in-spanish"
  contact: "contact-in-spanish"

这样你就会渲染pages#index和pages#contact,它只会改变路线,你不必接触你的代码。希望这对您有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4 i18n,如何转换子域用于区域设置的路由 的相关文章

随机推荐

  • 向 ReduxReducer 添加回调

    是否有任何错误 反模式 就 React Redux 中的思考 中添加了一个回调action data转化为行动 reducer ACTION FOR REDUCER var x 123 if action data callback act
  • 如何使用 Angular 2 动画实现翻转效果?

    我一直在我的项目中使用纯CSS翻转卡片 但这个解决方案不是合适的 有人可以通过点击按钮来呈现角度 2 的翻转吗 我在 angularjs 中找到了一个https codepen io Zbeyer pen oXQrZg https code
  • 从模态 MFC 表单获取输入信息

    我已经创建了表格CPreparationDlg具有Edit Control 然后我创建了创建模态表单的应用程序 在按 确定 后 我需要将编辑控件中输入的文本读入主程序的变量中 最好的方法是什么 class CPreparationApp p
  • gsutil 复制到存储失败

    我正在 us central1 a 区域的实例中工作 无法复制 200GB 文件 我试过了 gsutil m cp L my log my file gs my bucket gsutil m cp L my second log my f
  • 如何使用 TypeScript、Jest 和 Enzyme 测试 React 中的按钮点击

    我正在使用 TypeScript 构建一个 React Native 应用程序 我正在使用 Jest 和 Enzyme 进行组件测试 我也在使用 React 导航 我正在努力编写单击按钮的单元测试 这是组件的代码 只是渲染函数 render
  • 尝试注册 RCTBridgeModule 类 RCTFileReaderModule

    尝试为名称 FileReaderModule 注册 RCTBridgeModule 类 RCTFileReaderModule 但该名称已由类 FileReaderModule 注册 尝试使用命令react native run ios在i
  • 如何将 Pyspark Dataframe 标题设置到另一行?

    我有一个如下所示的数据框 col1 col2 col3 id name val 1 a01 X 2 a02 Y 我需要从中创建一个新的数据框 使用 row 1 作为新的列标题并忽略或删除 col1 col2 等行 新表应如下所示 id na
  • 如何避免这两个 SQL 语句之间出现死锁?

    我有两个存储过程在单独的线程中运行 在 SQL Server 2005 上运行 一个过程将新行插入到一组表中 另一个过程从同一组表中删除旧数据 这些过程在表上遇到了死锁DLevel and Model 这是架构 source barrams
  • URL 中的 %2C 是什么?

    在 URL 中 什么是 2C编码的含义及其用途是什么 查看http www asciitable com http www asciitable com 看着那 这Hx 十六进制 列 2C映射到 任何不寻常的编码都可以通过这种方式检查 Hx
  • 在 Android 中加密/解密字符串的简单方法

    我的问题是如何加密String String AndroidId Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceSta
  • 由于 Azure ADB2C,Blazor 服务器 SignalR 集线器在 StartAsync 上失败

    我创建了一个 Blazor 服务器应用程序 以开始学习 Blazor 和一些更新的技术 我遵循了 Microsoft 提供的集线器聊天教程 事情进展顺利 然后我添加了一些基本的 cookie 身份验证 事情仍然在进展中 然后 我按照 Car
  • 是否有用户友好的 Log4Net 日志文件查看器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有任何第三方工具可以识别 Log4Net 日志文件结构并通过提供搜索功能等以用户友好的方式显示它 Try 色域日志查看器 https source
  • FragmentActivity 无法解析为类型

    我正在尝试来自的应用程序这个博客 http android developers blogspot com 2011 02 android 30 fragments api html 在延长的同时FragmentActivity 我收到以下
  • 我应该何时何地使用 WCF

    我浏览了几个在线教程 其中涵盖了 WCF 的优点 如何构建服务 客户端等 不过 我想了解一点整体情况 问题 gt 什么样的应用程序或应用程序中的哪些功能要求我使用 WCF 功能 一个具体的例子应该可以更好地帮助我 有几种情况 需要 WCF
  • 我需要一个 jQuery Autocomplete 使用 ajax 返回 id 和 name 的示例

    我需要一个示例 说明如何编写 jQuery 自动完成代码来填充product id 同时显示调用ajax 页面 remote php 的product name
  • 在 Angular 中深度复制对象

    AngularJS 有angular copy 深度复制对象和数组 Angular 也有类似的东西吗 您还可以使用 JSON parse JSON stringify Object 如果它在你的范围内 那么它就存在于每个 Angular 组
  • 使用 stargazer 分析包含时间序列的数据帧

    我有一个面板数据集共 10 个观测值和 3 个变量 观测值 30 的数量 10 行 国家 地区 2 列 迁移参数 相应年份的 1 列 可以这么说 我的数据框由 3 个年度数据框组成 我该如何申请观星者考虑到它是一个面板数据集 所以最大 N
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • Node.js 中没有请求状态 Morgan Logging

    我正在 Azure VM 上运行 node js 应用程序 使用 PM2 处理负载平衡和重新启动 这是服务器设置和日志记录代码 var logger require morgan var app express app set views
  • Rails 4 i18n,如何转换子域用于区域设置的路由

    我正在使用子域来确定 Rails 4 网站中的区域设置 我完全按照我想要的方式使用区域设置切换器 但现在我需要翻译路线 并且我不确定继续的最佳方法 我看过https github com kwi i18n routing https git