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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top