首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gettext程序

Gettext程序
EN

Stack Overflow用户
提问于 2016-04-11 18:44:50
回答 1查看 64关注 0票数 1

给出这句话:

代码语言:javascript
复制
"You've successfully donated €10 to Doctors of the World"

我想为不同的金额和慈善机构名称动态生成此文本,我使用了

代码语言:javascript
复制
_("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。

这些方法中有没有可行的,或者有没有我没有考虑过的更好的替代方法?

EN

回答 1

Stack Overflow用户

发布于 2016-04-11 21:38:40

这可能不是最好的方法,但我已经用过好几次了。

考虑一个包含以下字段的表:

代码语言:javascript
复制
id, name_en, name_ru, created_at, updated_at

我假设您使用I18n来获取语言参数。

控制器

代码语言:javascript
复制
def index
  @lang = params[:locale] || I18n.locale
  @examples = Example.all
end

视图

代码语言:javascript
复制
 <% @examples.each do |ex| %>
    <li>
        <%= ex.send("name_#{@lang}") %>
    </li>
 <% end %>   

上面的代码将显示基于I18n.locale的name_ru (俄语名称)或name_en (英语名称

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36546462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档