come creare un file di lingua per il testo in file javascript?
-
06-07-2019 - |
Domanda
La mia applicazione web utilizza un lotto di javascript e nel javascript ho messaggi che riporto all'utente.
Qual è il modo migliore per estrarre il testo dal mio javascript e memorizzarlo esternamente in un altro file in lingua .js, e come potrei fare riferimento nel mio codice js in futuro?
Qualche best practice per questo?
Soluzione
Crea un oggetto letterale:
var messages = {
welcome: "Welcome",
goodbye: "Goodbye",
error: "Something bad happend. Sowwy!"
};
A cui puoi fare riferimento, in questo modo:
if (error) alert(messages.error);
Funziona benissimo se vuoi implementare più lingue. Quello che faccio di solito è includere un file sul lato server che visualizza un "messaggio" oggetto in base alla lingua selezionata nella configurazione dell'app o in base alla cultura dell'interfaccia utente (nel caso di ASP.NET).
Ecco come lo useresti, in linea:
<head>
<!-- messages.aspx renders out the object literal -->
<script type="text/javascript" src="messages.aspx"></script>
<script type="text/javascript">
/* when messages.aspx is included it provides you with an object literal
as a global variable. The example below would alert "Something bad
happend. Sowwy!" */
if (error) alert(messages.error);
</script>
</head>
La cosa bella dell'uso di un oggetto letterale è che il codice è più dettagliato. Invece di usare un array, in questo modo: alert (messaggi [0])
fai questo: alert (messages.error)
che è un po 'più esplicativo.
Nota a margine: tutti i tuoi messaggi sono definiti in un oggetto, invece di essere definiti da un mucchio di variabili, evitando così di inquinare lo spazio dei nomi globale.
In JavaScript è possibile modificare gli oggetti in fase di esecuzione. Quindi, se volessi aggiungere più messaggi all'oggetto, più avanti nel tuo codice, faresti semplicemente questo:
messages.newMessageAddedLaterOnInTheCode = "This is a new message";
Altri suggerimenti
Vedo che gli altri ti hanno detto come memorizzarlo in un file JS (come hai chiesto). Ma potrei suggerire di memorizzarlo in un file XML, invece? È un po 'più facile da gestire (IMO).
Crea un file XML, con voci come questa:
<text id="welcome_to_site">Welcome to our site!</text>
<text id="come_back_soon">Come back soon!</text>
Quindi puoi facilmente prendere tutto il testo che ti serve nel tuo normale JS / jQuery:
var text = new Object();
$.ajax({
async: false,
type: 'GET',
url: 'text.xml',
dataType: "xml",
success: function(xml){
$(xml).find('text').each(function(){
text[$(this).attr('id')] = $(this).text();
});
}
});
E per invocare del testo, è semplice come questo:
alert (testo [ 'welcome_to_site']);
E puoi sempre cambiarlo facilmente nel file XML: aggiungi testo, rimuovi testo, modifica testo. È molto semplice. Aiuta anche a separare il tuo design e ti apre le porte per consentire ad altri di modificare il testo, che altrimenti non sarebbero in grado di fare se dovessero ordinare un gruppo di JavaScript.
Un modo per farlo è avere una js separata nella tua pagina che in realtà punta a uno script lato server. Questo script può quindi echeggiare le stringhe necessarie in questo modo:
var STRINGS = {'greeting': "Hello", 'error': "Something went wrong"};
E nella tua pagina web hai questo:
Lo facciamo per http://addons.mozilla.org qui: http://addons.mozilla.org/en-US/firefox/pages/js_constants.js