首頁 > web前端 > js教程 > 將JavaScript字符串定位在PHP MVC框架中

將JavaScript字符串定位在PHP MVC框架中

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-02-22 10:18:10
原創
630 人瀏覽過

高效的PHP MVC框架中JavaScript字符串本地化方法

Localizing JavaScript Strings in a PHP MVC Framework

本文將演示如何在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));
    }
登入後複製
  • 我們調用位於/languages/translate.js中的translate()函數,並將包含在名為LOCALIZATION的數組中的所需元素的名稱作為參數傳遞。
  • 我們使用語法translate(name_of_language_array.name_of_element, extra_parameter1, extra_paramater2, etc…),只使用逗號分隔額外的參數。
  • 如果參數用引號括起來,則參數當然可以是文字。

在我們更深入地研究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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板