PHP核心日期()格式的语言翻译

时间:2011-02-11 17:39:56

标签: php debugging date translation

好的,所以我有一个庞大而复杂的“即将发生的事件”PHP模块,我经常与之合作,我目前正在研究多语言(法语/英语)网站,我需要翻译我的PHP语言日期。

我不想做的事情在函数本身内嵌入了大量的条件PHP。有人可以帮我提出一系列条件语句,检查是否

<?php if (ICL_LANGUAGE_CODE == 'fr') { } ?>

为true,然后只需在处理函数后更改月份变量。原谅我的无知,在语法方面我只是有点慢。有人能告诉我检查特定输出是否被回显然后翻译它会是什么样子。以下不起作用

<?php if (ICL_LANGUAGE_CODE == 'fr') { February == Fevrier } ?>

修改

我考虑使用本地化框架,但我正在使用WordPress开发此网站并使用WPML(wordpress多语言插件)。这是一个真正的救命。我对添加复杂框架犹豫不决。这个轻量级吗?我更愿意翻译我所知道的字符串。唯一的格式是 - 1月01日// 2011年1月1日...日期名称不会出现在网站上,其他字符串翻译也是不必要的。

5 个答案:

答案 0 :(得分:2)

使用您的字符串创建数组,并使用每种受支持语言的键:

$months = array(
    1=>array(
        'fr'=>'Janvier',
        'en'=>'January'
    ),
    2=>array(
        'fr'=>'Février',
        'en'=>'February'
    ),
    3=>array(
        'fr'=>'Mars',
        'en'=>'March'
    ) // and so on...
);

$days = array(
    1=>array(
        'en'=>'Monday',
        'fr'=>'Lundi'
    ),
    2=>array(
        'en'=>'Tuesday',
        'fr'=>'Mardi'
    ) // and so on...
);

然后你可以像这样访问字符串:

$days[$day_of_week][ICL_LANGUAGE_CODE]
$days[$month][ICL_LANGUAGE_CODE]

......等等。

答案 1 :(得分:1)

您上面提出的建议都是有效的,并且可以正常使用。

WPML包括一个字符串转换工具,它也可以执行此操作并保持代码清洁。优点是您的代码将包含一种语言的文本,翻译将在WPML的字符串翻译编辑器中完成。

如果您选择添加更多语言,则无需更改代码中的任何内容。只需在WPML中添加更多翻译。

看看这里: http://wpml.org/documentation/support/translation-for-texts-by-other-plugins-and-themes/

您需要使用* icl_register_string *来注册可翻译的字符串。然后,在输出时,通过* icl_t *。这种机制类似于GetText,但它支持静态和动态文本。

如果您这样做,我建议您为字符串选择新的上下文字段。这样可以很容易地在字符串翻译编辑器中找到它们。

WPML缓存结果并将具有相同上下文的所有字符串加载在一起,因此您不会感觉到任何性能受到影响。

答案 2 :(得分:1)

这是我在wordpress中快速将日期翻译为法语的原因:

<?php setlocale(LC_TIME, "fr_FR"); ?>      
<?php echo utf8_encode(strftime("%e %B, %G", strtotime(the_date('','','',FALSE)))); ?>  

答案 3 :(得分:0)

如果您的项目不是高负载,请尝试这种方法,这足够灵活:

function t_date($format, $date=FALSE, $lang=LANG)
{
    $months['January'] = array('uz'=>'Yanvar');
    $months['February'] = array('uz'=>'Fevral');
    $months['March'] = array('uz'=>'Mart');
    $months['April'] = array('uz'=>'Aprel');
    $months['May'] = array('uz'=>'May');
    $months['June'] = array('uz'=>'Iyun');
    $months['July'] = array('uz'=>'Iyul');
    $months['August'] = array('uz'=>'Avgust');
    $months['September'] = array('uz'=>'Sentabr');
    $months['October'] = array('uz'=>'Oktabr');
    $months['November'] = array('uz'=>'Noyabr');
    $months['December'] = array('uz'=>'Dekabr');

    $days['Monday'] = array('uz'=>'Dushanba');
    $days['Tuesday'] = array('uz'=>'Seshanba');
    $days['Wednesday'] = array('uz'=>'Chorshanba');
    $days['Thursday'] = array('uz'=>'Payshanba');
    $days['Friday'] = array('uz'=>'Juma');
    $days['Saturday'] = array('uz'=>'Shanba');
    $days['Sunday'] = array('uz'=>'Yakshanba');

    if ($date)
        $date = date($format, strtotime($date));
    else
        $date = date($format, time());

    foreach ($months as $key => $val)
        $date = str_replace($key, $val[$lang], $date);
    foreach ($days as $key => $val)
        $date = str_replace($key, $val[$lang], $date);

    return $date;
}

答案 4 :(得分:0)

将php语言更改为wp

if (ICL_LANGUAGE_CODE == 'fr') {
 setlocale(LC_ALL, 'fr_FR');
} else if (ICL_LANGUAGE_CODE == 'de') {
 setlocale(LC_ALL, 'de_DE');
} else if (ICL_LANGUAGE_CODE == 'it') {
 setlocale(LC_ALL, 'it_IT');
} else if (ICL_LANGUAGE_CODE == 'en') {
 setlocale(LC_ALL, 'en_EN');
}

时间字符串

$translated_date = strftime("%e %B %Y",strtotime($post->post_date));

安全编码

$translated_date = utf8_encode($translated_date);