为了账号安全,请及时绑定邮箱和手机立即绑定

PHP多语言的实现

PHP多语言的实现

PHP
Smart猫小萌 2023-04-15 20:41:54
我想知道如何在 PHP 脚本中实现多种语言。我真的找不到任何方便的方法来说明如何做这样的事情以使翻译变得容易。我举个例子://Output looks like this://Where are You, Mike? It is me, Rebeca! I am waiting here for 5 hours!//But in file it is some abomination like:echo 'Where are You, '.$name.'? It is me, '.$name2.'! I am waiting here for '.$time.' hours!';//Just imagine that meantime there might be different functions, included files//and other code required to create more sentences like the above to create long text...如果文件输出这样的文本被许多不同的变量和代码打碎,那么语言文件应该是什么样子的?我想到将用户语言保存在 $_SESSION['lang'] 中,并在每个文件中包含具有正确语言的文件。但是在我尝试这样做之后,它确实看起来像这样://main fileecho $txt[1].$name.$txt[2].$name2.$txt[3].$time.$txt[3];//lang file$txt[1] = 'Where are You, ';$txt[2] = '? It is me, ';$txt[3] = '! I am waiting here for ';$txt[3] = ' hours!';它看起来很可笑,不可读,并且有很多潜在的错误。试想一下,如果您是只能访问 lang 文件的翻译人员——不可能翻译这样的文本,对吧?这应该/可以如何以不同的方式完成?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

是的,它是那样做的,但不是像你那样做的单个单词或句子块,否则它不会翻译得很好。


通常如何处理这个问题,你定义你的模板,然后有一个你用传递的参数调用的函数。


请参阅: https: //www.php.net/manual/en/refs.international.php获取 gettext 等,或查找一个库。


例子:


<?php

$trans = [

    'en' => [

        'user_where_are_you_text' => 'Where are You, %s? It is me, %s! I am waiting here for %s hours!',

        //...

    ],

    'fr' => [

        'user_where_are_you_text' => 'Où es-tu, %s? C\'est moi, %s! J\'attends ici depuis %s heures!'

        //...

    ],

    //...

];


$name = 'Loz';

$name1 = 'Rasmus';

$time = 3;


function __($key, ...$arguments) {

    global $trans, $lang;

    return sprintf($trans[$lang][$key], ...$arguments);

}


//

$lang = 'en';

echo __('user_where_are_you_text', $name, $name1, $time).PHP_EOL;


//

$lang = 'fr';

echo __('user_where_are_you_text', $name, $name1, $time).PHP_EOL;


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信