【问题标题】:Is it possible to pass parameters into a translated sentence in a .po translation file?是否可以将参数传递到 .po 翻译文件中的翻译句子中?
【发布时间】:2010-11-29 11:01:01
【问题描述】:

我正在使用.po.mo 文件来翻译我的网站。 我的问题是,是否可以将参数传递到 .po translation file 中的翻译句子中?

例如: en -> 嗨,我叫莎拉,我是个酒鬼 我想用两个参数翻译那句话,名字(莎拉)和职业(酒鬼)。

提前谢谢你。

【问题讨论】:

    标签: parameters gettext translate


    【解决方案1】:

    这是一个老话题,但只是提一下......

    在许多语言中,您还可以指出要使用的参数,例如(在 PHP 中):

    $name = 'Agustinus';
    printf(_("Hi %1$s.\n The owner of this page is: %1$s. Today is %s.", 
       $name, date('d-m-Y'));
    

    【讨论】:

    • 所有平​​台的php都可能支持%1$s(注意不是%$1s),但我相信起源是gnu libc。不过,值得注意的是,如果您使用%1$s,您可能不会在同一字符串中使用%s,并且您也不允许在编号上有空格。
    【解决方案2】:

    这取决于语言,但基本上,是的,你总是可以的。

    printf(_("Hi, my name is %s and I am %s"), name, prof);
    

    在 c.

    echo sprintf(_("Hi, my name is %s and I am %s"), $name, $prof);
    

    在 php 中。

    alert( _('Hi, my name is %s and I am %s')
        .replace('%s',name).replace('%s',prof) );
    

    在 javascript 或更好的东西中:

    alert( _('Hi, my name is %1 and I am %2')
        .replace('%1',name).replace('%2',prof) );
    

    或者任何你能想到的占位符。 Javascript 实现当然依赖于在预处理时或作为运行时下划线函数提供的翻译机制。

    等等。

    【讨论】:

    • 确实是老话题,但不得不说一个潜在的错误:“Hola, soy un Francisco llamado alcoholico”(“你好,我是一个叫酒鬼的弗朗西斯科”)。翻译句子的方法有很多种,这是一个正确翻译的证明,但gettext的结果是错误的。
    • 我不确定你到底想说什么。当然,如果使用错误的方式,gettext 可能会产生错误的结果。您可能只是误译了原文,您可能翻译了原文而没有过多注意语法(大小写、性别等),您可能有一份原文应该根据上下文进行不同的翻译(这个很容易解决) .我不明白为什么许多翻译方法是正确翻译的证明,但 gettext 结果是错误的?
    • 大声笑,我没想到会在这里得到答案。我的意思是,对于一种语言,具有两个参数的文本字符串可以被翻译成具有不同顺序的参数的字符串。虽然第一个是英文名称,第二个是职业,但可能第一个是职业,第二个是西班牙语的名称。除了 javascript 的第二种情况,它看起来会很好用。
    • 有不同的替换机制。在 gnu 中(至少)c *printf* 系列函数将与 translated 字符串中的 %1$s%2$s 占位符一起使用。 (为什么一接到通知就不回复?:))
    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2011-06-21
    相关资源
    最近更新 更多