2009-10-12 27 views
5

Khi phát triển chương trình AJAX, tôi đã gặp quyết định thiết kế để tạo chuỗi I18N trong JavaScript.code. Một số chuỗi chỉ được sử dụng bởi JavaScript. Ví dụ.Cách quốc tế hóa chuỗi được sử dụng trong mã javascript?

$('#submit').click(function() { 
    $(#target).html('Please wait while submitting...').load(someURI); 
} 

Tôi muốn I18N chuỗi 'Vui lòng chờ trong khi gửi ...'. Tôi không chắc chắn cách tốt nhất để làm điều đó là gì. Hiện tại, tôi chỉ có chuỗi I18N-ed trong máy chủ và được đưa vào biến javascript trong trang (tôi đang sử dụng PHP/wordpress).

<script>strSubmit = <?php _e('Please wait while submitting...'); ?></script> 

Sau đó, trong javascript, tôi chỉ cần sử dụng varialble

$('#submit').click(function() { 
    $(#target).html(strSubmit).load(someURI); 
} 

này hoạt động, nhưng có vẻ lộn xộn. Có cách nào tốt hơn để đạt được điều này?

+0

Bạn có thể đọc thêm ở đây về cách Wordpress đang có kế hoạch để hỗ trợ i18n trong javascript: https://make.wordpress.org/core/2016/10/10/javascript-internationalization/ – Spone

Trả lời

2

bạn cũng có thể tự động hóa điều này bằng cách sử dụng một php "tiền xử lý" cho javascript

<script src="script.php?file=blah.js"> 

nơi script.php là một cái gì đó giống như

function _repl($x) { return '"' . _e($x[1]) . '"'; } 

    $js = file_get_contents($_GET['file']); 
    $js = preg_replace_callback('~_e\("(.+?)"\)~', '_repl', $js); 
    echo $js; 

này một cách minh bạch sẽ thay thế _e(something) trong mã javascript với các chuỗi thực tế

+0

Bạn có đề xuất tạo một yêu cầu HTTP cho mọi chuỗi yêu cầu bản địa hóa không? – ep3static

0

Bạn có thể tự tạo văn bản vào tập lệnh gốc.

$('#submit').click(function() { 
    $(#target).html('<?php _e('Please wait while submitting...'); ?>').load(someURI); 
} 
+0

có vẻ giống như việc tạo tập lệnh trong php sau đó tạo thẻ ngôn ngữ – abimelex

0

bạn có thể tạo loại ứng dụng REST lication, nơi bạn sẽ điền vào các yếu tố của chuỗi javascript trên tải tài liệu từ một dịch vụ:

$(function(){ 
    var handleResponse = function.....; // fill your string elements from response 
    var lang = "fr"; // language of localized document 

    $.ajax(
     type: "GET", 
     url: "/i18n.php?lang=" + lang + "&names=someName+someName1+someName2", 
     success: handleResponse 
    ); 
}); 
10

Bạn nên sử dụng JSON để chuyển đổi các chuỗi phía máy chủ l10n đến một đối tượng JSON:

// In the <head> tag : 
<script type="text/javascript" src="locales.php"></script> 

và điều này trong locales.php:

var l10n = <?php echo json_encode($l10n); ?>; 

nơi $ l10n là một mảng chứa tất cả các miền địa phương, như thế này:

$l10n = array(
    'Please wait while submitting...' => 'Veuillez patienter durant le traitement...', 
    'bah' => 'bih' 
); 

Bây giờ bạn có thể sử dụng các chuỗi như thế này trong JS:

function $T(s){ 
    return l10n[s] || s; 
} 

alert($T('Please wait while submitting...')); 
+0

Đúng. Điều này rất giống với cách chúng ta thực hiện nó :) – kangax

+0

Trong phương pháp này, tất cả các chuỗi I18N đều được tải xuống ngay cả chỉ một số ít được sử dụng. –

+2

Có, nhưng các tập tin được lưu trong bộ nhớ cache bởi trình duyệt, vì vậy nó chỉ được tải xuống một lần. –

Các vấn đề liên quan