【问题标题】:Linguistic cases / declination and gettext语言案例/偏角和gettext
【发布时间】:2012-02-05 19:18:40
【问题描述】:

有没有人想过 gettext 和某些语言的不同情况。我们目前遇到的问题是,在克罗地亚语中,连名字都被拒绝了。

示例

  • 英文:关于Foobar
  • 德语:Über Foobar
  • 克罗地亚语:O Foobaru(标记 u

我正在使用 gettext 灵活地插入此名称,因为它可能会更改:

translate('About %s', name)

这里允许偏角的最佳方法是什么?如果出现 Foobar 和克罗地亚偏角,您可以这样解决:

About %s => O %su

但是现在让我们使用一个以 a 结尾的单词,比如 Foobara,那么克罗地亚语的正确语法应该是 O Foobari >a 必须被移除并附加一个 i)。

如何克服 gettext 的不足?

【问题讨论】:

    标签: translation multilingual gettext


    【解决方案1】:

    gettext 不支持这种变格。

    如果您知道 %s 的所有可能候选者,您可以在资源中列出所有候选者,例如,

    msgid "About Foobar"
    msgstr "O Foobaru"
    msgid "About Bazbar"
    msgstr "O Bazbarbaru"
    msgid "About Foobara"
    msgstr "O Foobari"
    msgid "About Bazbara"
    msgstr "O Bazbari"
    

    但它会使德语等其他语言变得繁琐。

    或者,如果您可以将克罗地亚语变格定义为一个函数,您可以先在您的函数中对其进行处理,然后继续使用通用的 gettext 转换。

    translate('About %s', myDeclension(name));
    

    而 myDeclension 函数就是这样做的,

    function myDeclension(text) {
      if (isLocale() != 'hr') { return text; }
      if (isEndWithA(text)) { return replaceLastAWithI(text); }
      else { return addTrailingU(text); }
      // add more Croatian specific conversion if any
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2011-06-09
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多