@EvgeniySaschenko

Какие есть ограничения при использовании строк в качестве ключей объекта?

Добрый день,

Делаю функционал для локализации сайта, для переводов создал функцию в которую передаётся текст - этот текст используется в качестве ключа в объекте с переводами.

Подскажите есть ли какие то ограничения при использовании текстового ключа (например длина текста, спец символы), на что стоит обратить внимание?

Функция для вывода переводов
var $t = function (text) {
  text = cookies.language === 'ru' ? text : $tStore[text];
  return text;
};


Хранилище переводов
var $tStore = {
  "Корзина": "Cart",
  "Логин": "Login",
  "Длинный текст с разными спецсимволами... \"\'/\/\/": "Long text with different special characters ... \"\ '/ \ / \ /",
}


Вызов функции

$t("Корзина");
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
2chevskii
@2chevskii
Если бы каждый мог в поиск, тостер бы вымер.
Насколько я знаю - никаких. Любая строка модет быть ключом в объекте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
С точки зрения программирования - никаких проблем, кроме только что мизерного оверхеда на процессор, работа со строками немного медленней чем с числами или прямыми ссылками на методы (например передавать объект, у которого вызываете виртуальный наследуемый метод translate).

С точки зрения итогового результата - плохо, теряется контекст перевода.

Правильно - на каждую строчку в интерфейсе определить соответствующую константу, в имени которой заложена логика и желательно место использования, что то типа AUTHFORM_LOGIN_POPUP_DESCR для всплывающей подсказки над полем ввода логина формы авторизации.

Идеально - если у вас есть языкозависимые места, содержимое которого может меняться по ситуации, и даже простая подстановка по шаблону не помогает (бывает текст перевода пропускают еще через шаблонизатор, чтобы вставлять числа из переменных к примеру), вместо констант, на каждую, используйте функции, в параметрах которых указан язык и параметры контекста, возвращающие итоговую строчку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы