我在Laravel 4.2中做了一个多语言项目。其中一种语言是阿拉伯语。除了使用语言文件(https://laravel.com/docs/4.2/localization)进行参数替换外,一切正常。我将向您展示纯PHP中的示例。最终结果是一样的,也许我可以编写自己的函数来修复它。
$string = [
'L143' => ':company_name استعراض وتقييم',
'L155' => 'تقييم :total_points التقييم يستند إلى',
];
echo str_replace(':company_name', 'Testname', $string['L143']);
echo "\n";
echo str_replace(':total_points', '1234', $string['L155']);
结果:
Testname استعراض وتقييم
تقييم 1234 التقييم يستند إلى
预期结果:
第一个例子是corect。在第二个例子中,单词顺序似乎是相反的。
以上示例也可在此沙箱中使用:http://sandbox.onlinephpfunctions.com/code/91fff23e333b3e090ca72d9ce8eb7a2af6d3f999
我有两个问题:
谢谢!
答案 0 :(得分:0)
我在PHP7.2中遇到了这个问题。我研究了一下,认为问题是PHP中的字符串处理机制。如果要在RTL字符串中替换LTR字符串,PHP会认为整个字符串都是RTL。因此,请在替换之前创建LTR字符串;
echo str_replace(':total_points', chr(0xe2) . chr(0x80) . chr(0x8e) . '1234', $string['L155']);
此外,您可以在Wiki上了解有关RTL字符串的信息; https://en.wikipedia.org/wiki/Left-to-right_mark