国际化 - 如何处理性别问题?

时间:2015-05-11 23:41:49

标签: cakephp internationalization cakephp-3.0

我有一个我正在国际化的cakephp 3应用程序。该应用程序是用法语写的,我正在添加英语。

我正在使用cakephp 3的内置工具来完成它。我的应用程序中有一个句子必须以英语翻译,无论用户是男性还是女性。在法语中,句子保持不变。

法语句子:“xxx n'apasindiquésesdisponibilités”

英文翻译:“xxx没有给一个男人”,“xxx给她一个女人的可用性。”

起初,我的应用看起来像这样:

<?= __("{0} n'a pas indiqué ses disponibilités", $user->name); ?>

我对其进行了更改,以便提供两种不同的翻译:

<?php if ($user->gender == 'M'): ?>
<?= __("{0} n'a pas indiqué ses disponibilités", $user->name); ?>
<?php else: ?>
<?= __("{0} n'a pas indiqué ses disponibilités", $user->name); ?>
<?php endif; ?>

但是当使用bin/cake i18n extract生成pot文件时,只提取了一个句子。我接着尝试过这个:

<?php if ($user->gender == 'M'): ?>
<?= __x("speaking of a man", "{0} n'a pas indiqué ses disponibilités", $user->name); ?>
<?php else: ?>
<?= __x("speaking of a woman", "{0} n'a pas indiqué ses disponibilités", $user->name); ?>
<?php endif; ?>

仍然只有一个msgid记录在pot文件中。如何处理这类问题?

1 个答案:

答案 0 :(得分:0)

使用上下文翻译功能是最佳选择,最后一个例子是处理此类案例的正确方法。

问题是I18N shell提取任务,它只使用消息作为标识符来存储提取的值,从而导致先前的上下文被覆盖。我认为这是一个错误,请report it over at GitHub

在修复此问题之前,您必须手动将遗失的邮件添加到.pot文件中。