让我直接跳到我的问题中。
我有一些简单的语言文件只返回一个包含语言字符串的关联数组(如果有任何帮助的话,这就是Laravel)。不要担心变量,这仅仅是出于示范目的。
郎/ EN /的common.php :
<?php return [
"yes"=>"Yes",
"no"=>"No",
"hello"=>"Hello {$name}!",
"newstring"=>"This string does not exist in the other language file",
"random_number"=>"Random number: ".rand(1,10)
];
郎/ DA /的common.php :
<?php return [
"yes"=>"Ja",
"no"=>"Nej",
"hello"=>"Hej {$name}!"
];
现在,正如您所看到的,索引newstring
并不存在于丹麦语言文件中。我写了一个脚本,而不是必须记住添加所有索引的所有语言文件而不是一个,这基本上是这样做的:
$base_lang = require('lang/en/common.php');
$language_to_merge = require('lang/da/common.php');
$merged_lang = array_replace_recursive($base_lang, $language_to_merge);
file_put_contents('lang/da/common.php', var_export($merged_lang, true));
到目前为止,这么好。现在,我们说$name = "John Doe";
。根据PHP的本质,运行此脚本后,lang/da/common.php
现在将是
<?php return [
"yes"=>"Ja",
"no"=>"Nej",
"hello"=>"Hej John Doe!",
"newstring"=>"This string does not exist in the other language file",
"random_number"=>"Random number: 4"
];
您可能已经猜到,不需要的结果位于hello
和random_number
- 索引中。最好它应该仍然是"hello"=>"Hej {$name}!"
和"random_number"=>"Random number: ".rand(1,10)
,但显然由于PHP解析数组值而发生这种情况,这基本上告诉我这是错误的策略。
<?php return [
"yes"=>"Ja",
"no"=>"Nej",
"hello"=>"Hej {$name}!",
"newstring"=>"This string does not exist in the other language file",
"random_number"=>"Random number: ".rand(1,10)
];
知道怎么解决这个问题吗?我可以file_get_contents()
并做一些正则表达式,但我担心其中涉及太多错误来源。
提前致谢!
有些人建议使用单引号。虽然这实际上回答了我的问题,但我意识到我不够精确;当Language类处理文件时,我希望解析值(正常行为) - 但只有当我运行merge-script时,我才希望实际的文字变量引用保持不变。
在我找到适当的解决方案之前,我只是运行基本语言的数组,检查我尝试填充缺失键的语言中的关键存在 - 并附加一个评论这些文件的底部。
答案 0 :(得分:1)
修改:请参阅OP的评论。这是事实,但不是他的问题的答案:)
您应该使用单引号而不是双引号:
<?php return [
"yes"=>'Yes',
"no"=>'No',
"hello"=>'Hello {$name}!'
"newstring"=>'This string does not exist in the other language file'
];
PHP仅解析双引号内的变量。