2013-06-03 30 views
2

我们正在使用Gettext翻译我们的网站,但最近我们发现我们的翻译团队存在一些问题。如何使用gettext和一些复杂变量进行翻译

我们有一些字符串如...

鲍勃晚上赢得 * * 红色 * 气球 *

和我们得到这样的东西...

sprintf("Hi %s this %s you %s %s %s %s", $name, $action, $number, $color, $object); 

的问题是,我们的翻译团队不知道变量订购...而且是非常难治为他们正确翻译是“编码”的字符串,他们只在他们看到poEdit的这段文字

Hi %s this %s you %s %s %s %s 

¿我们如何处理这些复杂的琴弦?

回答

1

最后我们找到了最适合我们的方法。

我们有像

sprintf的字符串( “你好%s此%s的您%s%S%s%S”,$名称,$行动,$号码,$颜色,$对象);

然后我们可以改变瓦尔这样

sprintf的位置(“嗨%1 $ S此%2 $ S您%3 $ S%4 $ S%5 $ S%$ 6 s“,$ name,$ action,$ number,$ color,$ object); 的翻译团队可以改变位置只换号

然后......最重要的事情...告诉给翻译团队是什么这些变量...有像gettext的评论......

<!-- //Hi translator... The variables are $name, $action, $number, $color, $object --> 
sprintf(_('Hi %1$s this %2$s you %3$s %4$s %5$s %6$s'), $name, $action, $number, $color, $object); 

添加了xgettext中的行-c选项,你可以把里面的.po文件这个评论,这是工作:)

的方式,我们的选择,我希望这是你一个很好的解决方案

2

使用poedit,它给你一个机会给字符串添加注释。

+0

感谢您的回复,问题是我们有很多相似的线条,并且很难完成这一切......我们需要其他解决方案。 我们首先尝试使用像_(“Hi {$ name} {$ number}”这样的变量)但是我们在poedit中遇到了很多问题,因为它没有得到这个变量。 有什么想法? – aaronroman

+0

不幸的是,这是唯一的方法。这是枯燥乏味的工作,但是'poedit'(和'gettext')只能理解'printf'风格的替代参数。也许编写一个小应用程序会比较容易,它将“Hi {$ name} {{number}}”转换为“Hi%s%d”,并将原始字符串复制到注释中,从而生成注释。 po'文件? –