Как создать языковой файл для текста в файлах JavaScript?

StackOverflow https://stackoverflow.com/questions/1628407

  •  06-07-2019
  •  | 
  •  

Вопрос

Мое веб-приложение использует большое количество javascript, а в javascript есть сообщения, которые я сообщаю пользователю.

Каков наилучший способ извлечь текст из моего javascript и сохранить его снаружи в другом файле языка .js, и как я буду ссылаться на него в своем коде js в будущем?

Есть ли лучшие практики для этого?

Это было полезно?

Решение

Создать литерал объекта:

var messages = {
    welcome: "Welcome",
    goodbye: "Goodbye",
    error: "Something bad happend. Sowwy!"
};

На что вы можете ссылаться, например, так:

if (error) alert(messages.error);


Это прекрасно работает, если вы хотите реализовать несколько языков. Что я обычно делаю, так это включаю файл на стороне сервера, который выдает «сообщения» объект в зависимости от того, какой язык выбран в конфигурации приложения или в соответствии с UI-культурой (в случае ASP.NET).

Вот как вы бы это использовали, in-line:

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


В использовании литерала объекта следует отметить, что код более многословен. Вместо использования массива, например: alert (messages [0]) , вы делаете это: alert (messages.error) , что немного более объяснительно.

С другой стороны: все ваши сообщения определены в одном объекте, а не в куче переменных, что позволяет избежать загрязнения глобального пространства имен.


В JavaScript вы можете изменять объекты во время выполнения. Поэтому, если вы хотите добавить больше сообщений к объекту, позже в своем коде, вы просто сделаете это:

messages.newMessageAddedLaterOnInTheCode = "This is a new message";

Другие советы

Я вижу, что другие сказали вам, как сохранить его в файле JS (как вы и просили). Но могу ли я предложить вам сохранить его в XML-файле? Это несколько проще в управлении (ИМО).

Создайте файл XML с такими записями:

<text id="welcome_to_site">Welcome to our site!</text>
<text id="come_back_soon">Come back soon!</text>

Тогда вы можете легко получить весь необходимый текст в обычном 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();
        });
    }
});

И для вызова некоторого текста это так просто:

<код> оповещения (текст [ 'welcome_to_site']);

И вы всегда можете легко изменить его в файле XML: добавить текст, удалить текст, редактировать текст. Это очень просто Это также помогает отделить ваш дизайн и открывает двери для вас, чтобы позволить другим редактировать текст, который в противном случае не смог бы, если бы им пришлось перебирать кучу JavaScript.

Один из способов сделать это - добавить на страницу отдельное js, которое фактически указывает на серверный скрипт. Затем этот скрипт может отобразить нужные вам строки следующим образом:

var STRINGS = {'greeting': "Hello", 'error': "Something went wrong"};

И на вашей веб-странице есть это:     

Мы делаем это для http://addons.mozilla.org здесь: http://addons.mozilla.org/en-US/firefox/pages/js_constants.js

scroll top