我有一个我正在国际化的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文件中。如何处理这类问题?
答案 0 :(得分:0)
使用上下文翻译功能是最佳选择,最后一个例子是处理此类案例的正确方法。
问题是I18N shell提取任务,它只使用消息作为标识符来存储提取的值,从而导致先前的上下文被覆盖。我认为这是一个错误,请report it over at GitHub。
在修复此问题之前,您必须手动将遗失的邮件添加到.pot
文件中。