默认的 Locale 是 EN,支持 ZN,并提供了 zh.yml。当 Locale 是 ZH 的时候没有问题,但是当是 EN 的时候报 translation missing 错误。例如 t("hello") zh.yml hello: 你好 en.yml // 空文件
我知道在 en.yml 中加入 "hello: hello"可以解决问题。但是这不是很傻么?能不能设置一下,让 I18n 在默认 locale 下直接用显示,不再报错?
谢谢。
但是这不是很傻么? 哪里傻... en.yml 是空的话你让 i18n 怎么显示 显示什么...
但是这不是很傻么?
PS. t("hello") 这个 hello 只是个 key 而已...
t("hello")
#1 楼 @leozwa 就是不翻译,显示 key 啊。English 是默认语言,代码里面就用英语写的,没必要再翻译一遍啊。
#2 楼 @dreamable 用 key?那这么说,假设有一句很长的话需要 I18n,你的 key 也是和原文一样长咯?
<% if params[:locale] == 'en' %> <p>Hello</p> <% else %> <p><%= t('.hello') %></p> <% end %>
当然我认为这纯属蛋疼......
#1 楼 @leozwa 楼主说得在理,Cocoa 的 I18n 就可以这样
你可以定义一个 I18n 的 exception_handler:
I18n.exception_handler = CustomizeI18nExceptionHandler.new class CustomizeI18nExceptionHandler def call(exception, locale, key, options) if exception.is_a?(MissingTranslation) && locale == I18n.default_locale return key end end end
不过如果是有比较多的 i18n 内容项目,我建议是将内容放到数据库或者其他存储,方便修改,有很多 i18n 的 backend,比如 redis,activerecord。你复写一下 backend 的 lookup 方法,也可以实现上面的用途,毕竟用 exception_handler 不是正途。
#5 楼 @huacnlee 原来是这样... 可是如果写好的 app 要拿去做翻译 不就得去 view 里面一句一句挖出来了么...
#7 楼 @leozwa 早年的桌面级开发都这样,所有的字符串资源挖出来,一条条做多国语言翻译。