2009-10-12 22 views
5

Podczas opracowywania programu AJAX spotkałem się z decyzją projektową, aby napisać ciąg I18N w JavaScript.code. Niektóre ciągi są używane tylko przez JavaScript. Na przykład.Jak umiędzynarodowić ciąg używany w kodzie javascript?

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

Chciałbym I18N napis "Proszę czekać, przesyłając ...". Nie jestem pewien, jaki jest najlepszy sposób na zrobienie tego. Obecnie mam tylko ciąg I18N-ed na serwerze i renderowany do zmiennej javascript na stronie (używam PHP/wordpress).

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

Następnie, w javascript, po prostu użyj varialble

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

To działa, ale wygląda niechlujny. Czy istnieje lepszy sposób osiągnięcia tego?

+0

można przeczytać więcej tutaj o sposobie Wordpress planuje wsparcie i18n w javascript: https://make.wordpress.org/core/2016/10/10/javascript-internationalization/ – Spone

Odpowiedz

2

można również zautomatyzować za pomocą php "preprocesora" dla javascript

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

gdzie script.php jest coś takiego jak

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

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

będzie przejrzysty zastąpić _e(something) w kodzie javascript z rzeczywistymi ciągami znaków

+0

Czy sugerujesz generowanie żądania HTTP dla każdego łańcucha wymagającego lokalizacji? – ep3static

0

Można wygenerować tekst do samego oryginalnego skryptu.

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

bardziej przypomina tworzenie samego skryptu w php, a następnie generowanie tagu językowego. – abimelex

0

można utworzyć rodzaj aplikacji REST lication, gdzie chcesz wypełnić elementy ciągów JavaScript w obciążeniu dokumentów z usługi:

$(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

należy używać JSON do konwersji ciągów stronie serwera l10n do obiektu JSON:

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

i to w locales.php:

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

gdzie $ l10n jest tablicą, która zawiera wszystkie lokalizacje, na przykład:

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

Teraz można korzystać z tych ciągów znaków takich jak to w JS:

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

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

Tak. Jest to bardzo podobne do tego, jak to robimy :) – kangax

+0

W tym podejściu wszystkie ciągi I18N są pobierane, nawet jeśli użyto tylko kilku. –

+2

Tak, ale pliki są buforowane przez przeglądarkę, więc są pobierane tylko raz. –

Powiązane problemy