【问题标题】:Gettext/Django for german translations: formal/informal salutations用于德语翻译的 Gettext/Django:正式/非正式称呼
【发布时间】:2013-07-03 20:29:08
【问题描述】:

我维护一个包含翻译的可插入 Django 应用程序。 Python 和 HTML 代码中的所有字符串都是用英文编写的。在将字符串翻译成德语时,我一直在努力解决德语区分正式演讲和非正式演讲的问题(请参阅T–V distinction)。因为该应用程序在不同的网站上使用,从社交网络到银行网站,我不能只支持正式或非正式版本。而且由于翻译可能会有很大差异,因此我无法对其进行参数化。例如。句子“你想注销吗?”会有这两种翻译:

  • Wollen Sie sich abmelden? (正式)
  • dich abmelden 愿意吗? (非正式)

Gettext 中有什么可以帮助我解决这个问题的吗?

【问题讨论】:

    标签: django gettext


    【解决方案1】:

    您可以使用contextual markers 为您的翻译提供额外的上下文。

    logout = pgettext('casual', 'Do you want to log out?')
    

    ...

    logout = pgettext('formal', 'Do you want to log out?')
    

    【讨论】:

    • 这基本上意味着我必须将每一个 gettext/trans/blocktrans 放入带有正式/休闲分支的 if 子句中,对吧?
    • 您可以尝试使用变量作为第一个参数,但是您可能需要对消息提取进行后处理,或者您必须自己进行。
    • 消息上下文不适合这个,因为它们需要修改源代码。有关处理此问题的标准 gettext 方式,请参阅我的其他答案。
    【解决方案2】:

    gettext 和 UNIX 在其他类似情况下使用的最佳方法是使用locale variants。例如,sr_RS 是(或者曾经是,因为现在塞尔维亚语被认为是一种元语言......)用于塞尔维亚语的代码,用西里尔文编写。但它有时也用拉丁文书写,所以sr_RS@latin 用作语言名称,当然还有 MO 文件名或目录。

    在这里,看看我系统上的一些翻译:

    $ find /usr/local/share/locale | grep /sr
    /usr/local/share/locale/sr
    /usr/local/share/locale/sr/LC_MESSAGES
    /usr/local/share/locale/sr/LC_MESSAGES/bash.mo
    /usr/local/share/locale/sr/LC_MESSAGES/bfd.mo
    /usr/local/share/locale/sr/LC_MESSAGES/binutils.mo
    /usr/local/share/locale/sr/LC_MESSAGES/gettext-runtime.mo
    /usr/local/share/locale/sr/LC_MESSAGES/gettext-tools.mo
    /usr/local/share/locale/sr/LC_MESSAGES/glib20.mo
    /usr/local/share/locale/sr/LC_MESSAGES/wget.mo
    /usr/local/share/locale/sr@ije
    /usr/local/share/locale/sr@ije/LC_MESSAGES
    /usr/local/share/locale/sr@ije/LC_MESSAGES/glib20.mo
    /usr/local/share/locale/sr@latin
    /usr/local/share/locale/sr@latin/LC_MESSAGES
    /usr/local/share/locale/sr@latin/LC_MESSAGES/glib20.mo
    /usr/local/share/locale/sr_RS
    /usr/local/share/locale/sr_RS/LC_MESSAGES
    /usr/local/share/locale/sr_RS/LC_MESSAGES/mkvtoolnix.mo
    /usr/local/share/locale/sr_RS@latin
    /usr/local/share/locale/sr_RS@latin/LC_MESSAGES
    /usr/local/share/locale/sr_RS@latin/LC_MESSAGES/mkvtoolnix.mo
    $
    

    因此,处理德语变体的最佳方法是相同的:使用de(或de_DE)作为基本的非正式变体,并拥有一个单独的翻译文件de_DE@formal,其中包含翻译的正式变体。

    这基本上也是 WordPress 所做的。当然,作为 WordPress,它们有自己的特殊风格,不使用变体语法,而是在文件名中添加第三个组件:de_DE.mo 是非正式的(也是后备的,因为它缺少任何进一步的规范)变体de_DE_formal.mo 包含正式变体。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2015-03-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多