当前位置: 首页 > 知识库问答 >
问题:

i18n翻译是如何在Django/Gae中起作用的--波兰人的奇怪行为?

皇甫建木
2023-03-14

我用Django1.3/Google应用引擎编写程序,发现缺乏支持和奇怪的行为。

首先,ungettext不支持波兰语直接查看,但Django1.3支持PO文件标记复数形式(许多非英语语言有多个复数形式)--我为波兰语做了这样的操作--也许俄语也会这样:

复数形式:nplurals=3;复数=(n==1?0:n%10>=2&n%10<=4&(n%100<10n%100>=20)?1:2);

我举了一些例子,正如前面所说的ungettext是无用的,因为波兰语的复数形式比英语多,我用它来提取msgId,仅此而已

# should be 0 kóz
ungettext(u'%s kóz', u'%s kozy', 0) % 0
# should be 1 koza
ungettext(u'%s kóz', u'%s kozy', 1) % 1
# should be 2 kozy
ungettext(u'%s kóz', u'%s kozy', 2) % 2
# should be 5 kóz
ungettext(u'%s kóz', u'%s kozy', 5) % 5

我使用makemessages.py并用trick翻译得到3个复数形式,而不是像英语中的2个(波兰语需要2-3个形式):

msgid "%s kóz"
msgid_plural "%s kozy"
msgstr[0] "%s 1 koza"
msgstr[1] "%s 2 kozy"
msgstr[2] "%s 5 kóz"

现在更多的把戏我做但不懂的行为:

我为DJANGO正确设置了所有变量,包括(希望如此)和:

LANGUAGE_CODE='en'-所有翻译作品(pl,en-us,en-gb,de-de,...)

LANGUAGE_CODE='xx'-所有翻译作品(pl,en-us,en-gb,de-de,...)

LANGUAGE_CODE=“en-us”-所有翻译作品(pl,en-us,en-gb,de-de,...),但不包括en-us翻译

共有1个答案

东门俊智
2023-03-14

那是一个微不足道的错误:

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

路径是在第一次使用后定义的,所以django无法构建默认的翻译--这里的修复非常琐碎。

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LANGUAGE_CODE='xx'正在创建无效的翻译容器,该容器将永远不会被使用,并且第一次将有效设置与其他语言(如pl)一起使用会产生很好的副作用:)

 类似资料:
  • 在JavaScript“Django JS”的Django i18n中,错误地假设只有英语-https://code.djangoproject.com/ticket/20280。 由于这个限制,如果我的语言不是英语,我必须在字符串提取之后将所有msgid复制到msgstr。我在网上搜索,但什么也没有找到。 是否有任何工具,我可以运行在*.po文件,将所有msgid复制到msgstr? 我需要把波

  • 我想用法语和英语翻译我的应用程序。我完全遵循了CakePHP3文档,但它不起作用。 在我的开发中,我使用了一个vagrant框来轻松启动并运行CakePHP3。这个盒子名叫“流浪厨师” 我修改了第100行,将法语作为默认语言。 我将此方法添加到默认页面控制器 我加了这两行 从终端,我输入这个命令。CakePHP在中创建了2个文件。那些文件是和。我翻译了默认值。像这样的文件: 文件现在如下所示: 尽

  • 问题内容: 我有Yii2高级模板,我想为前端视图设置翻译,这是我所做的: 然后我加在 和 我在视图中使用它为: 但翻译无效,显示为 问题答案: 您只需按照以下步骤操作…… 步骤1: 在目录中,创建文件夹。 步骤2:在目录内创建文件,内容如下: 注意: 确保将所有必需的语言添加到“语言”数组中。在上面的示例中,我为Generate Yii2 Framework多语言添加了英语和俄语。 步骤3:在文件

  • 当我忘记翻译项目视图中的某个地方时,我会更改文件/app/Locale/por/LC_MESSAGES/default。po并将其发送回服务器。 但最重要的是,这个“新翻译”需要几个小时才能被查看,简言之:我只是发送文件,清理缓存和浏览器CakePHP,按F5,然后。。。什么也没发生。 出于什么原因? [编辑]

  • 问题内容: 当我运行以下Jenkins管道脚本时: 我收到此错误: 如果从中删除,则可以正常工作。有人可以解释导致此行为的作用域规则吗? 问题答案: TL; DR 定义的变量 与 主脚本主体不能从其他方法来访问。 定义的变量 ,而不 能够直接通过任何方法甚至从不同的脚本访问。这是一个坏习惯。 使用 和 注释定义的变量可以直接从同一脚本中定义的方法访问。 说明 当groovy编译该脚本时,它实际上将