高效的PHP MVC框架中JavaScript字符串本地化方法
本文將演示如何在PHP框架中高效地本地化JavaScript字符串。您可以從此處下載本教程的工作實現。
有多種方法可以在PHP環境中本地化JavaScript字符串。從技術上講,可以復制JavaScript文件,並根據目標語言命名,並在用戶每次在網站上選擇新語言時加載所需版本。但這肯定是一種很難稱之為最佳實踐的方法,即使它“有效”。
這種方法的主要缺點是,每次需要修改JavaScript代碼時,都必須對每種語言執行修改。這不僅容易出錯,還會增加不必要的工作量。
還有一種方法是直接通過嵌入在JavaScript代碼中的PHP變量來調用文字字符串,但這取決於您的框架架構,並不總是可用的選項。
因此,我將向您展示一種肯定有效且易於維護的方法。
請記住,您可以從此處下載一個可運行的示例。
讓我們開始吧……
在本教程附帶的示例中,我設置了一個按鈕,該按鈕觸發名為trigger_msg()的JavaScript函數:
echo '';
trigger_msg()函數位於/public/JS/main.js:
function trigger_msg(){ return alert(translate(LOCALIZATION.here_is_how_it_works)); }
在我們更深入地研究translate()函數之前,以下是位於/languages/current_language/JS/current_language.js中的LOCALIZATION數組的樣子:
var LOCALIZATION = { here_is_how_it_works : 'Voici comment cela fonctionne.\nAppuyez sur le bouton suivant afin de voir comment ça se passe avec des paramètres.', who_does_not_know_are_and_that_the_sky_is : 'Qui ne sait pas que %s x %s font %s,\net que le ciel est %s?', blue : 'bleu' };
在我們的數組元素定義中,您可以看到使用了“%s”,這是我們用來保存額外參數的表達式。不過,我們稍後再討論這一點。 請注意,如果您使用自定義對話框,則可以在數組元素定義中插入HTML樣式標籤,例如等,它會很好地工作。
現在是時候關注我們的translate()函數了:
(function () { if (!window.translate){ window.translate = function(){ var html = [ ]; var arguments = arguments; var string = arguments[0]; var objIndex = 0; var reg = /%s/; var parts = [ ]; for ( var m = reg.exec(string); m; m = reg.exec(string) ) { parts.push(string.substr(0, m.index)); parts.push("%s"); string = string.substr( m.index+m[0].length ); } parts.push(string); for (var i = 0; i < parts.length; ++i){ var part = parts[i]; if (part && part == "%s"){ var object = arguments[++objIndex]; if (object == undefined) { html.push("%s"); }else{ html.push(object); }; }else{ html.push(part); } } return html.join(''); } }; })();
下面的這個函數構成了我們的JavaScript本地化方案的核心。
基本上,在名為string的變量中,我們存儲從trigger_msg()函數捕獲的參數,在第一個for循環中解析它們,使用名為reg的變量中保存的正則表達式過濾它們,並將結果部分推送到名為parts[]的數組中。然後,我們將這些部分重新組合到名為html[]的數組中,我們的函數將返回該數組。
名為reg的變量保存一個簡單的正則表達式'/%s/',%s是我們如上所述選擇的用於定義參數的語法。
/public/JS/main.js中的trigger_msg_with_params()函數展示瞭如何在本地化字符串時使用參數。實際上,在系統中,有時需要翻譯的文字字符串可能包含取決於用戶輸入的值,此函數通過允許不那麼頻繁地重用代碼而變得非常有用:
echo '';
您可以看到每個定義的參數,例如var param1,也可能是傳遞給函數調用的參數。定義的參數也可以是translate()函數的實際調用。所有這些,再次證明非常有用。
這就是全部內容。此系統代表了一種高效且可靠的方式來跨您的PHP框架翻譯您的JavaScript字符串,並允許高度的靈活性。
歡迎您留下您的評論或問題。敬請關注更多教程。
修改說明:對原文進行了語句調整和詞彙替換,使之更流暢自然,並保持了原文意思不變。 同時修復了代碼片段中一個潛在的IE瀏覽器兼容性問題 ( m[0][0]
可能在IE中返回 undefined
)。 其餘圖片保持不變。
以上是將JavaScript字符串定位在PHP MVC框架中的詳細內容。更多資訊請關注PHP中文網其他相關文章!