我从数据库获取翻译,并希望在Javascript对象中生成它,例如:
var Lang = {
eng: {
txtUserName: 'Username',
txtLogout: 'Logout'
},
dnk: {
txtUserName: 'Brugernavn',
txtLogout: 'Afslut'
}
}
我陷入了循环,得到的结果不是我所需要的。 这是我的PHP:
var Lang = {
<?php
$allLangs = $this->params->getLanguages;
foreach ($allLangs as $allLang) :
echo $allLang->lang_code . ': ';
echo '{';
foreach ( $translationsall as $translation ) :
if ( $translation['it_text'] == 'txtUserName' ) :
for ( $i = 1; $i <= 1; $i++ ){
var_dump($translationsall[$i]);
}
endif;
endforeach;
echo '},';
echo "\r\n";
endforeach;
?>
}
这就是我得到的:
var Lang = {
dnk: {array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "VMS"
}
array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "VMS"
}
},
eng: {array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "VMS"
}
array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "VMS"
}
}
如何编辑循环以获得所需的结果?
也许有一种更聪明的方法来生成Lang对象?
而且,忘了提到我只需要很少的翻译,这就是为什么在以下情况下我在PHP中使用它的原因:
if ( $translation['it_text'] == 'txtUserName' ) :
//stuff
endif;
欢迎任何想法:)
这是我从var_dump($ translationsall)中得到的:
array(2748) {
[0]=>
array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "CMS"
}
[1]=>
array(2) {
["it_text"]=>
string(8) "appTitle"
["it_name"]=>
string(3) "CMS"
}
[2]=>
array(2) {
["it_text"]=>
string(9) "txtLogout"
["it_name"]=>
string(6) "Afslut"
}
[3]=>
array(2) {
["it_text"]=>
string(9) "txtLogout"
["it_name"]=>
string(6) "Logout"
}
[4]=>
array(2) {
["it_text"]=>
string(10) "btnRefresh"
["it_name"]=>
string(9) "Hent Igen"
}
[5]=>
array(2) {
["it_text"]=>
string(10) "btnRefresh"
["it_name"]=>
string(7) "Refresh"
}
}
答案 0 :(得分:1)
请不要这样做。 -对PHP后端进行API调用,生成所需的数据。 -使用现成的功能(例如jQuery的$.ajax
或其他预构建的框架)将帮助您实现这一目标。
如果您仍然想动态执行此操作(您的问题),请删除var_dump
-最终转储类型和其他详细信息(应有的话)并使用foreach
(键,值),这将帮助您生成所需的内容。 -但宁愿走这条狡猾的路线,我还是建议您看一下如何使用Laravel或其他框架来提供API。
答案 1 :(得分:1)
您可以使用 JSON 将数据从 PHP 传递到 JS 。
在PHP中,您可以使用json_encode()
:
echo json_encode($translation);
在您的JS中使用JSON.parse()
:
var obj = JSON.parse('{"key":value}');
您可以执行以下操作:
<?php
$allLangs = $this->params->getLanguages;
$json = json_encode($allLangs);
?>
<script>
var Lang = JSON.parse('<?php echo $json; ?>');
</script>
答案 2 :(得分:0)
您可以尝试使用echo看到下面的代码:
var Lang = {
<?php
$allLangs = $this->params->getLanguages;
foreach ($allLangs as $allLang) :
echo $allLang->lang_code . ': ';
echo '{';
foreach ( $translationsall as $translation ) :
if ( $translation['it_text'] == 'txtUserName' and $translation['itl_lang_code '] == $allLang->lang_code) :
echo "txtUserName:'".$translation['it_text']."',txtLogout:'".$translation['it_name']."' ";
endif;
endforeach;
echo '}';
echo '},';
echo "\r\n";
endforeach;
?>
}
答案 3 :(得分:0)
正如这里的其他人已经提到的;像这样动态创建您的JavaScript是一个坏主意-我会改用JSON序列化和反序列化数据。无论如何,如果您坚持动态创建;可能是类似的东西;
var Lang = {
<?php
$allLangs = $this->params->getLanguages;
foreach ($allLangs as $allLang) {
echo $allLang->lang_code . ': {';
foreach ( $translationsall as $translation ) {
$total_words_to_translate = count($translation);
for($i = 0; i <= $total_words_to_translate; $i++){
if ( $translation['it_text'] == 'txtUserName' ){
print("txtUserName: ".$translationsall[$i]);
}
if ( $translation['it_text'] == 'txtLogout' ){
print("txtLogout: ".$translationsall[$i]);
}
}
}
echo '},';
echo "\r\n";
}
?> }
当我们不知道您的数据库/变量的结构/命名约定时,很难确定确切的代码。
答案 4 :(得分:0)
使用json_encode:
var Lang = <?php
$all_langs = $this->params->getLanguages();
echo json_encode($all_langs);
?>;
答案 5 :(得分:0)
不确定我与数据定义的距离有多近,但是我已经将它们包括在内,以便您可以了解我的假设并希望能够根据需要进行调整。
它的工作方式是从$translationsall
数组的开头开始,并假设$allLangs
数组的顺序与条目的顺序相同(因此在本例中为dnk,然后是eng值)。然后,将它们填充到语言键下的输出中,以it_text
作为键,it_name
作为翻译。
$translationsall = [["it_text" => "txtLogout", "it_name"=>"Afslut"],
["it_text"=> "txtLogout", "it_name"=> "Logout"],
["it_text" => "txtLogout2", "it_name"=>"Afslut2"],
["it_text"=> "txtLogout2", "it_name"=> "Logout2"]
];
$allLangs = [ (object)["lang_code"=> "dnk"], (object)["lang_code"=> "eng"] ];
$countTrans = count($translationsall);
$out = [];
$i = 0;
while( $i < $countTrans ) {
foreach ( $allLangs as $language ) {
$out[$language->lang_code][$translationsall[$i]["it_text"]] = $translationsall[$i]["it_name"];
$i++;
}
}
echo json_encode($out, JSON_PRETTY_PRINT);
这将打印出
{
"dnk": {
"txtLogout": "Afslut",
"txtLogout2": "Afslut2"
},
"eng": {
"txtLogout": "Logout",
"txtLogout2": "Logout2"
}
}