Symfony 2 - 双向翻译

时间:2016-10-05 12:25:23

标签: php symfony internationalization locale translation

我必须翻译一个网页,其中的网页内容可以用英文或法文写成。
所以我在翻译库中制作了两个文件:

  • message.en.yml(在语言环境 en_us或en_gb 时将法语翻译成英语
  • message.fr.yml(在语言环境为 fr 时将英语翻译为法语

为了解释我的问题,我将举一个例子,即Hardware | Matériel字。{
使用 fr 区域设置Hardware查看网页时,需要Matériel翻译。
所以我把Hardware: Matériel放在我的message.fr.yml中。

使用 en_us或en_gb 查看页面时,区域设置Matériel需要由Hardware翻译。
所以我把Matériel: Hardware放在我的message.en.yml中。

此时翻译行为是:
在使用fr语言环境查看页面时Hardware已正确翻译 使用en_gb区域设置查看页面时Hardware未正确翻译 使用en_us区域设置查看网页时,Hardware错误地翻译了Matériel。{
为了增加乐趣,如果我清除Symfony缓存,行为改变,有时一切都由Matériel翻译,有时什么都没有...
一周前我只需将法语翻译成英语,只需使用message.en.yml文件就可以完美地工作,也许有些事情要做,我在使用多个文件时没有注意到。
有人可以解释我如何处理这种双向翻译吗?

2 个答案:

答案 0 :(得分:1)

使用变量。

我正在使用这样的翻译:

messages.en.yml

string.hardware: Hardware

messages.fr.yml

string.hardware: Matériel

在树枝上:

{{ "string.hardware"|trans }}

使用动态变量:

string.hardware: %variable% Hardware

树枝中的用法:

{{ "string.hardware"|trans({"%variable%": your_variable_or_string}) }}

答案 1 :(得分:0)

好的,我理解我做错了什么。 对于这种情况,你必须:

  • 在我的message.fr.yml中输入:Hardware: Matériel。 (如果fr locale通过Hardware翻译Matériel
  • 在我的message.en.yml中输入:Matériel: Hardware。 (如果en locale通过Matériel翻译Hardware
  • 在我的message.en.yml中输入:Hardware: Hardware。 (如果语言环境不翻译 Hardware

我认为所有这一切都是因为翻译后备,我要求翻译Hardware所以symfony在message.en.yml.first中查找一个(因为语言环境是en),如果它是doens& #39; t find any,它在message.fr.yml中找到它,在这里找到Hardware: Matériel所以它使用它。
我仍然不知道为什么有时候,根据缓存,翻译在en_gb语言环境中正常工作......