2013-03-29 60 views
0

我的頁面有3種語言,我在每個文件(索引,聯繫人等)的標題中包含所選語言文件(en,ru,pl)。如何在JavaScript文件中插入php變量?

<?php 
session_start(); 
include('language/'.$_SESSION['lang'].'.php'); 
?> 

en.php

<?php 
session_start(); 
$lang = array(); 

$lang['hello'] = 'Hello'; 
$lang['world'] = 'World !'; 
?> 

ru.php

<?php 
session_start(); 
$lang = array(); 

$lang['hello'] = 'привет'; 
$lang['world'] = 'мир'; 
?> 

這就是我怎樣,我附和他們:

<p><? echo $lang['hello'].' '.$lang['world'];?></p> 

這工作得很好,但是我的.js文件有問題。如果我想提醒或插入一些文字,我不能。

舉例來說,在我的js文件之一,我有一個警告:

if (something_obj.val() == ''){ 
    alert('Wrong username given !'); 
    return false; 
} 

我如何能實現我的js文件語言文件?我需要創建一個新聞.js語言文件嗎?

+1

您可以使用JSON。 請參閱以下答案:http://stackoverflow.com/a/5619038/290172 – GExGE

+0

JavaScript的答案已經提供。但是,在PHP中翻譯;爲什麼重新發明輪子?大多數PHP安裝都安裝了[gettext](http://php.net/manual/en/function.gettext.php)。 Gettext是一種在應用程序中翻譯字符串的標準化方法,並使用包含每種語言翻譯的單獨「翻譯」文件(.po/.mo)。您可以通過設置當前'語言環境'來翻譯字符串,並通過'_('text-to-translate')翻譯文本' – thaJeztah

回答

3

你可以讓每種語言一個js文件與翻譯看起來像這樣:

// german.js 
var translations = { 
    'hello': 'hallo', 
    'world': 'welt' 
}; 

在其他JS腳本,只是做這樣的事情:

alert(translations['hello'] + " " + translations['world']) 

當然,你可能想選擇一個比translations更短的變量名稱。

然後,在你的PHP文件,包括基於語言的正確JS腳本:

<script src="languages/<?php echo $_SESSION['lang']; ?>.js"></script> 
+0

+1對於JavaScript翻譯,通常使用每種語言的單獨.js文件一個例子,看看jquery-ui日期選擇器; [jQuery的ui.datepicker-fr.js](http://jqueryui.com/resources/demos/datepicker/jquery.ui.datepicker-fr.js)。 – thaJeztah

1

您可以創建新的文件 - 例如js.php將加載正確的語言文件和打印出所有變量轉換爲JavaScript數組:

js.php

<script type="text/javascript"> 
var lang = { 
<?php 
session_start(); 
include('language/'.$_SESSION['lang'].'.php'); 

$data = array(); 
foreach ($lang as $key => $value) { 
    $data[] = '"' . $key . '" : "' . $value . '"'; 
} 
echo implode(',', $data); 
?> 
}; 
</script> 

然後包括必須使用JavaScript在頁面上此文件翻譯數組,並使用它:

alert(lang.key); 

而且是否會有在翻譯字符串"跡象,你有\"逃避它,例如使用:

$value = str_replace('"', '\"', $value); 
+0

不是一個好主意,除非你不介意高速緩存不起作用,我想。 – thejh

+0

這只是一個可以通過緩存功能擴展的想法。 – hsz