2

http://developer.android.com/guide/topics/resources/string-resource.html

我在 django 中找到了函数,但它不支持英语和类似语言以外的其他语言 - 如何处理它?

def ngettext(singular, plural, number):
    return real_ngettext(singular, plural, number)

在 Android 中更广泛地支持语言 - 如何在 django 中获得相同的支持:

当语言需要对数字 0 进行特殊处理时(如阿拉伯语)。

one当语言需要对像 1 这样的数字进行特殊处理时(与英语和大多数其他语言中的数字 1 一样;在俄语中,任何以 1 结尾但不以 11 结尾的数字都属于此类)。

2当语言需要对像 2 这样的数字进行特殊处理时(如威尔士语中的 2 或斯洛文尼亚语中的 102)。

少数当语言要求对“小”数字进行特殊处理时(如捷克语中的 2、3 和 4;或波兰语中以 2、3 或 4 结尾但不是 12、13 或 14 的数字)。

many 当语言需要对“大”数字进行特殊处理时(如马耳他语中以 11-99 结尾的数字)。

其他 当语言不需要对给定数量进行特殊处理时(如中文中的所有数字,或英文中的 42)。

我可以编写自定义函数,但它会使 django 提取脚本毫无用处。这个问题的最佳解决方案是什么?

4

2 回答 2

2

我认为作为 django i18n 实现的基础的 GNU gettext 支持您的用例。Plural-FormsGNU gettext doc中搜索。

于 2013-03-02T00:00:28.947 回答
0

也许这将是半题外话......我为俄语数字结尾的 AWK 脚本编写了一个函数(也许它对某人有用,他们探索它,并将其重新制作为 hi 最喜欢的语言):

#!/usr/bin/awk -f
function rne(rusnum,raz,dva,mnogo){ # Russian Number Endings (rusnum=number; raz -- ending for 1, 21, 101, etc; dva -- 2-4, 22-24, 102-104...; mnogo -- 0, 5-20, 25-30, 95-100...)
 rusnum_tmp[1]=substr(rusnum,length(rusnum),1) #getting units
 rusnum_tmp[2]=substr(rusnum,length(rusnum)-1,1) #getting tens
 rusnum_tmp[1]=rusnum_tmp[1]/1 #converting string to number
 rusnum_tmp[2]=rusnum_tmp[2]/1
 if(rusnum_tmp[1]==1&&(rusnum_tmp[2]!=1||length(rusnum)==1)){
  outrusend=raz
 }else{
  if(rusnum_tmp[1]<=4&&rusnum_tmp[1]>=2&&rusnum_tmp[2]!=1){outrusend=dva}else{outrusend=mnogo}
 }
 return outrusend;
}
于 2021-06-26T04:28:07.723 回答