我维护一个可插拔的Django应用程序,其中包含翻译。Python和HTML代码中的所有字符串都是用英语编写的。在将字符串翻译成德语时,我总是在努力解决德语区分正式和非正式演讲的问题(参见T区分)。因为这个应用程序是在不同的网站上使用的,从社交网络到银行网站,我不能只支持正式或非正式版本。因为翻译有很大的不同,所以我不可能把它参数化。例如:“你想注销吗?”会有以下两种翻译:
有什么能帮到我的吗?
发布于 2013-07-03 20:31:30
您可以使用语境标记为您的翻译提供额外的上下文。
logout = pgettext('casual', 'Do you want to log out?')..。
logout = pgettext('formal', 'Do you want to log out?')发布于 2016-11-06 09:23:57
在其他类似情况下,gettext和UNIX使用的最佳方法是使用地区变体。例如,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包含正式的变体。
https://stackoverflow.com/questions/17457544
复制相似问题