我们的一些开发人员(包括我)并不总是认真地将文本放在本地化文件中,结果是许多硬编码文本分散在很多视图中.我想知道你们是否有想法在视图中自动搜索硬编码文本?有没有人使用工具或方法来检查这个?我在想如果一个漂亮的bash脚本可以完成这项工作,但我有点迷失在哪里开始.任何帮助非常感谢.
编辑:不是100%准确,但最适合我,所以我接受了安迪的答案.
我必须用法语翻译一个网站.现在,法语和许多其他语言一样,具有性别和变形.问题是:
没有翻译,这将得到我今天的名字:
Date.today.strftime("%A")
Run Code Online (Sandbox Code Playgroud)
我该如何本地化?
即"Mardi"如果I18n.locale设置为fr.
我正在使用英语(en)和法语(fr)的国际化,我使用en.yml进行有限的使用以及我在fr.yml中编写的大部分翻译.
使用locale作为fr一切都很好,但是在en中它显示错误,因为缺少翻译范围.
例如,如果我有类似的东西
<%= text_field_tag( "search", params[:search], :placeholder=>t("Search"), :class=>"search_input") %>
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
<input class="search_input" id="search" name="search" placeholder="<span class=" translation_missing"="" title="translation missing: en.Search">
Run Code Online (Sandbox Code Playgroud)
我想要的是它应该关闭英语的翻译错误,因为英语是我的默认语言,但在某些情况下我使用了en.yml.
或者,如果这不可能,则应删除整个错误消息.
谢谢
ruby-on-rails internationalization ruby-on-rails-3 rails-i18n
我有一个嵌套属性,我在其上执行状态验证.我正在尝试没有成功提供完整错误消息文本中返回的属性名称的翻译.
调用模型Identity并包含一个名为identity的模型.模型嵌套在另一个具有has_many关系的模型中.
当前返回典型的错误消息
Identities identity can't be blank
Run Code Online (Sandbox Code Playgroud)
我想将属性(默认情况下Identities identity)转换为其他内容.
我有
en:
activerecord:
models:
identity:
identity: "whatever"
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会收到错误
I18n::InvalidPluralizationData (translation data {:identity=>"whatever"} can not be used with :count => 1):
Run Code Online (Sandbox Code Playgroud)
我试图通过改变上面的内容来为此添加复数数据
en:
activerecord:
models:
identity:
identity:
one: "one"
other: "other"
Run Code Online (Sandbox Code Playgroud)
这会将错误更改为
I18n::InvalidPluralizationData (translation data {:identity=>{:one=>"one", :other=>"other"}} can not be used with :count => 1):
Run Code Online (Sandbox Code Playgroud)
我也试过many而不是other没有区别.
我已经花了几个小时试图完成这项工作,在Stack Overflow和其他地方阅读了其他问题但没有成功.为属性名称编写翻译的正确方法是什么?
我有一个PetsController,其中设置了一条flash消息.像这样的东西:
class PetsController
...
def treat_dog
#do somthing
flash[:success] = 'Your dog is being treated.'
end
...
end
Run Code Online (Sandbox Code Playgroud)
此控制器属于Admin,因此它位于:app/controllers/admin/pets_controller.rb.我将使用I18n,所以我用控制器替换了字符串t('controllers.admin.pet.treated'),然后,我写了这个yml:
en:
controllers:
admin:
pet:
treated: "Your dog is being treated."
Run Code Online (Sandbox Code Playgroud)
位于:config/locales/controllers/admin/pet/en.yml它没有用.我试图找到它config/locales/controllers/admin/pets/en.yml,config/locales/controllers/admin/en.yml
config/locales/controllers/en.yml
并且没有一个工作,没有找到翻译.
如何使用此控制器的翻译?
t '.submit_button'在Rails视图中使用较短的i18n键(例如)使它们更容易键入,但它实际上是好的吗?稍后您决定重构您的视图和部分内容时,您必须记住更新相应的本地化条目.根据他们的商业含义来命名它们并且总是指定完整的密钥名称会不会更加健壮?
在Rails i18n中,如何使用以下内容获取某个键的所有值:
translations = I18n.backend.send(:translations)
Run Code Online (Sandbox Code Playgroud)
得到所有的钥匙
我需要能够获得某个部分,例如只返回"home"下的所有内容
en:
home:
test: test
Run Code Online (Sandbox Code Playgroud) 我想用两种语言(法语和英语)翻译我的rails应用程序,但遇到了一些问题.我有以下错误:
"fr" is not a valid locale
Run Code Online (Sandbox Code Playgroud)
在我的config/application.rb中:
I18n.enforce_available_locales = false
I18n.config.available_locales = :fr
config.i18n.default_locale = :en
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我在参数中收到语言环境:
I18n.locale = export_params[:lang] || I18n.default_locale
Run Code Online (Sandbox Code Playgroud)
我对语言环境"en"没有任何问题.我的应用程序翻译得很好但是当我使用与"en"不同的参数时,我会收到此错误消息.
我使用Rails 4.2.0
ruby-on-rails internationalization rails-i18n ruby-on-rails-4
有时我的Rails应用程序的一些规格似乎随机失败,因为突然英语不再是默认语言,而是德语:
expected: "Project test customer - Project test name (Audit, Access for all, 2015-06-15).pdf"
got: "Project test customer - Project test name (Audit, Zugang für alle, 2015-06-15).pdf"
Run Code Online (Sandbox Code Playgroud)
可以看出,"人人享有"这一部分突然间是"Zugangfüralle".我搜索了一个解决方案,它似乎I18n.locale是一个全局对象,所以当它在规范中发生变化时,它会持续存在.
问题并不总是发生,但我可以在指定这样的种子时重现它:rspec --seed 51012.因此,在某些其他规范之前(或之后)执行规范似乎确实存在一些问题.
我有一个功能规范,测试是否可以更改语言环境,如下所示:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content 'Willkommen'
end
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是有问题的规范,当它提前运行时,它会影响其他规格.
我希望我可以通过将规范中的语言设置回默认值来解决它,如下所示:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content 'Willkommen'
I18n.locale = :en
end
Run Code Online (Sandbox Code Playgroud)
没工作,这个也没有:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content …Run Code Online (Sandbox Code Playgroud) rails-i18n ×10
ruby ×2
activemodel ×1
config ×1
controller ×1
key ×1
key-value ×1
rspec ×1
rspec-rails ×1
views ×1