给出这句话:
"You've successfully donated €10 to Doctors of the World"我想为不同的金额和慈善机构名称动态生成此文本,我使用了
_("You've donated %{amount} to %{charity_name}")其中charity_name来自可能的慈善机构列表,每个慈善机构都是关于该慈善机构的数据的散列。
我不会说法语,在学校里只学过基本的法语,但这样做的问题(对于任何使用带有性别冠词的语言的人来说,这个问题可能很快就会显现出来)是,翻译中的" to“部分可以采取不同的形式,如la、au、a'l或aux,具体取决于名词。
例如"Vous souhaitez donner 10欧元aux Médecins du Monde“
考虑到这将需要扩展到其他语言,使用gettext处理这个问题的最好方法是什么?只有少数情况下需要这样做,因为大多数情况下的动态文本(99%+可以通过参数很好地处理。
我想了3种方法:
1)具有高度动态的文本,例如从函数生成的文本,根据需要每种语言每个消息一个。该函数接受金额和慈善机构名称作为参数,并返回翻译后的文本。
2)为每个慈善机构手动添加"to“的翻译,并使用该翻译代替%{charity_name},然后从po文件中获取翻译。
3)在每个慈善散列中添加一个条目,指定"to“的形式,例如les Médecins du Monde的散列也将存储aux Médecins du Monde。
这些方法中有没有可行的,或者有没有我没有考虑过的更好的替代方法?
发布于 2016-04-11 21:38:40
这可能不是最好的方法,但我已经用过好几次了。
考虑一个包含以下字段的表:
id, name_en, name_ru, created_at, updated_at我假设您使用I18n来获取语言参数。
控制器
def index
@lang = params[:locale] || I18n.locale
@examples = Example.all
end视图
<% @examples.each do |ex| %>
<li>
<%= ex.send("name_#{@lang}") %>
</li>
<% end %> 上面的代码将显示基于I18n.locale的name_ru (俄语名称)或name_en (英语名称
https://stackoverflow.com/questions/36546462
复制相似问题