gpt4 book ai didi

ruby-on-rails - rails-如何为i18n yaml动态添加/覆盖措辞

转载 作者:行者123 更新时间:2023-12-04 04:01:25 26 4
gpt4 key购买 nike

例如,我有一个默认的英语语言环境文件“en.yml”,其内容为:

 en:
messages: messages
users: users

现在,有一个客户希望在其产品中将消息命名为“讨论”,但用户应该仍然是用户。所以我要做的是创建“customer.en.yml”文件
en:
messages: discussions

它将覆盖默认的“消息”翻译,但将使所有其他词保持不变。我该如何实现?

因为如果我用以下方式加载en.yml:
config.i18n.load_path += Dir[File.join(RAILS_ROOT, 'config', 'locales', '*.{rb,yml}')] 

然后加载customer.en.yml(之前定义了APP_CONFIG ['customer_name'])
config.i18n.load_path += Dir[File.join(RAILS_ROOT, 'config', 'custom_locales',  APP_CONFIG['customer_name']+'.{rb|yml}')]

它只会覆盖我的“en”语言环境,而“用户”翻译将消失,对吗?

最佳答案

它不应覆盖您的“en”语言环境。翻译被合并。简单的I18n后端中的store_translations调用merge_translations,如下所示:

# Deep merges the given translations hash with the existing translations
# for the given locale
def merge_translations(locale, data)
locale = locale.to_sym
translations[locale] ||= {}
data = deep_symbolize_keys(data)

# deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
translations[locale].merge!(data, &merger)
end

如您所见,只有您在后一个yml翻译文件中输入的键会被覆盖。

关于ruby-on-rails - rails-如何为i18n yaml动态添加/覆盖措辞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com