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

Cakephp 国际化——如何处理性别问题?,cakephp,internationalization,cakephp-3.0,Cakephp,Internationalization,Cakephp 3.0,我有一个CakePHP3应用程序,目前正在国际化。该应用程序是用法语编写的,我正在添加英语 我正在使用CakePHP3的内置工具来实现这一点。我的应用程序中有一句话必须用不同的英语翻译,无论用户是男性还是女性。在法语中,句子保持不变 法语句子:xxx n'a pas indiquiéses disponibilités 中文翻译:xxx没有为一个男人提供机会,xxx为一个女人提供机会 起初,我的应用程序是这样的: <?= __("{0} n'a pas indiqué ses dispon

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

我正在使用CakePHP3的内置工具来实现这一点。我的应用程序中有一句话必须用不同的英语翻译,无论用户是男性还是女性。在法语中,句子保持不变

法语句子:xxx n'a pas indiquiéses disponibilités

中文翻译:xxx没有为一个男人提供机会,xxx为一个女人提供机会

起初,我的应用程序是这样的:

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

但是,pot文件中只记录了一个msgid。如何处理此类问题?

使用上下文翻译功能是一种方法,您的最后一个示例是处理此类情况的正确方法

问题在于I18N shell提取任务,它仅使用消息作为标识符来存储提取的值,从而导致覆盖以前的上下文。我认为这是一个错误。
在修复此问题之前,您必须手动将丢失的消息添加到.pot文件。

我第一次使用了x。我不确定我是误用了它还是一个bug。谢谢你的回答,我正在报道。
<?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; ?>
<?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; ?>