gettext如何处理动态内容? [英] How does gettext handle dynamic content?

查看:74
本文介绍了gettext如何处理动态内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在php(或者一般来说是gettext)中,当gettext看到动态内容的变量时,它会做什么?

In php (or maybe gettext in general), what does gettext do when it sees a variable to dynamic content?

我有2个案例.

1)假设我有<?=$user1?> poked John <?=$user2?>.也许在某些语言中,单词的顺序是不同的. gettext如何处理呢? (不,我不是在建立Facebook,这只是一个例子)

1) Let's say I have <?=$user1?> poked John <?=$user2?>. Maybe in some language the order of the words is different. How does gettext handle that? (no, I'm not building facebook, that was just an example)

2)假设我将一些类别存储在数据库中.它们很少,但是它们存储在数据库中.如果我<?php echo gettext($data['name']); ?>会发生什么?我也希望翻译人员也翻译这些类别名称,但是是否必须在数据库本身中完成?

2) Let's say I store some categories in a database. They rarely, but they are store in a database. What would happen if I do <?php echo gettext($data['name']); ?> ? I would like the translators to translate those category names too, but does it have to be done in the database itself?

谢谢

推荐答案

您最好的选择是使用sprintf()函数.然后,您将使用printf表示法来处理字符串中的动态内容.这是我不久前在这里找到的一个功能,可以轻松为您处理:

Your best option is to use sprintf() function. Then you would use printf notation to handle dynamic content in your strings. Here is a function I found on here a while ago to handle this easily for you:

function translate()
{
    $args = func_get_args();
    $num = func_num_args();
    $args[0] = gettext($args[0]);

    if($num <= 1)
      return $args[0];

    return call_user_func_array('sprintf', $args);

}

现在以示例1为例,您想将字符串更改为:

Now for example 1, you would want to change the string to:

%s poked %s

您将像这样输入translate()函数:

<?php echo translate('%s poked %s', $user1, $user2); ?>

您将使用poEdit解析所有translate()函数.然后将字符串"%s poked %s"转换为所需的任何语言,而无需修改%s字符串占位符.分别由translate()函数使用user1和user2输出时将替换它们.您可以在PHP手册中的sprintf()上阅读更多信息,以了解更多高级用法.

You would parse out all translate() functions with poEdit. and then translate the string "%s poked %s" into whatever language you wanted, without modifying the %s string placeholders. Those would get replace upon output by the translate() function with user1 and user2 respectively. You can read more on sprintf() in the PHP Manual for more advanced usages.

第2个问题.您将需要创建一个静态文件,poEdit可以解析该文件,其中包含类别名称.例如misctranslations.php:

For issue #2. You would need to create a static file which poEdit could parse containing the category names. For example misctranslations.php:

<?php

_('Cars');
_('Trains');
_('Airplanes');

然后进行poEdit解析misctranslations.php.然后,您可以使用<?php echo gettext($data['name']); ?>

Then have poEdit parse misctranslations.php. You would then be able to output the category name translation using <?php echo gettext($data['name']); ?>

这篇关于gettext如何处理动态内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆