Какая инфраструктура javascript лучше всего справляется с интернационализацией? - PullRequest
4 голосов
/ 13 марта 2012

Предположим, я создаю довольно большое браузерное интерактивное мультимедийное приложение, и у меня есть следующие требования:

  • Только для Webkit (допустим, хром на рабочем столе)
  • версии для планшетов и настольных ПК, возможно, с небольшими отличиями в интерфейсе пользователя
  • Полностью на стороне клиента: никакого взаимодействия с сервером вообще
  • Наилучшая производительность возможна
  • Полностью интернационализированный
  • Я собираюсь создать много этих приложений
  • Долгосрочная ремонтопригодность НЕ является приоритетом (здесь нет TDD)
  • Повторное использование и использование от проекта к проекту является приоритетом
  • Дизайнеры правят насестом - много времени будет потрачено на внешний вид и анимацию
  • Очень короткие сроки разработки
  • Маленькая, блестящая команда

Я ищу совета от людей, которые уже делали что-то подобное, чтобы не сделать неправильный выбор заранее.

Я знаю JS & CSS3 как внутри, так и снаружи, но я достаточно умен, опытен и стар, чтобы знать, что есть преимущества в использовании архитектурной среды, которую кто-то другой разработал, вместо того, чтобы использовать мою собственную. Однако эти преимущества вступают в силу только в том случае, если приложения, которые я пишу, соответствуют целям разработчика платформы.

Я потратил день, пытаясь разобраться в SenchaTouch, и пришел к выводу, что он отлично подходит для создания чего-то совершенно отличного от того, что я строю. (По аналогии SenchaTouch / ExtJS - это Swing, и я ищу Flash.) Кроме того, у Sencha, похоже, много трудностей, чтобы превратить Javascript в систему на основе классов, вместо того, чтобы просто принять / принять, что это прототип система. Это меня подвело.

Я провел целый день, изучая все о backbone.js, и мне действительно это нравится, за исключением 1) Мне не нужны ЛЮБЫЕ вещи взаимодействия с сервером (хотя я мог бы использовать это для начальной загрузки всех элементов пользовательского интерфейса из файлы ресурсов), и 2) он полностью игнорирует актуальность представлений. Но, может быть, это хорошо? Я не уверен в этом.

Я смотрел на knockout.js и, хотя он очень беспокоится о том, чтобы поддерживать представления в актуальном состоянии, ни одна из демонстраций, которые я смотрел, не затрагивала интернационализацию. Мои потребности в i18n просты: каждая текстовая строка, которая появляется в моем приложении, должна исходить из таблицы (и используемый язык можно изменить в любое время). Когда я вижу что-то подобное на домашней странице knockout.js:

optionsCaption="choose..."

Я беспокоюсь о том, как легко будет сделать эту строку динамической, основываясь на настройке переменной времени выполнения. То есть, если бы я хотел написать эквивалент:

optionsCaption=l10n("choose")

Существует ли достаточно безболезненный способ сделать это, и что связано с тем, что смена языка автоматически распространяется по всему пользовательскому интерфейсу?

Любая убедительная рекомендация, чтобы я посмотрел на еще одну структуру, которая может быть лучше подходит?

Кроме того, я предполагаю, что мы будем использовать jquery / ui или zepto, возможно, zepto, чтобы исключить множество шаблонов в динамическом обновлении страниц и анимации. Есть какие-нибудь полезные мысли об этой части архитектуры?

Ответы [ 5 ]

7 голосов
/ 05 апреля 2012

Мне самому было любопытно (здесь мне показался поиск нокаута + i18n), я сделал быстрый и грязный JSFiddle с утилитой Jed вместе с knockoutjs, который предложил Акаша. Мне также пришлось использовать немного JQuery.

Посмотрите здесь: http://jsfiddle.net/yUE7a/5/

Я создал пользовательскую привязку (i18n), которая привязывается к вашей текущей локали. Привязка i18n берет текст из элемента и использует его в качестве ключа и заменяет его переведенным текстом из Jed.

Локаль сама по себе реализована как ko.obervable, так что вы можете изменить значение локали и заставить knockoutjs обновлять все ваши метки перевода за один раз (возможно, вам придется кэшировать ключ между init и update, поскольку он перезаписывается $ (element) .html () вызов).

Одна проблема сохраняется, когда я включил Джеда в JsFiddle, все стили исчезли. Я не знаю почему, и если это действительно проблема с Jed + KnockoutJS или только с Jed + JsFiddle.

Я никогда раньше не использовал Jed, поэтому я не знаю, подходит ли он вашей цели, но это должно быть достаточно просто, чтобы заменить Jed другим фреймворком i18n.

Надеюсь, это поможет!

0 голосов
/ 31 октября 2013

Недавно я столкнулся с той же проблемой, и, поскольку для этого существует множество инструментов JS, ни один из них (насколько я обнаружил) не работал очень хорошо с KnockoutJS и не мог менять язык без обновления страницы.

Поэтому я создал слишком большой собственный файл для его обработки, который называется KnockoutJS-i18n .

Он работает как с простыми текстами, так и с переменными:

<div data-bind="html: i18n.get('hello')"></div>
<div data-bind="html: i18n.get('hello_name',{'name' : 'John Doe'})"></div>
0 голосов
/ 14 марта 2012

Я еще не пробовал их, но они, кажется, просты в использовании с любым фреймворком:

gettext для javascript: http://slexaxton.github.com/Jed/

гибкие формы множественного числа и пола: https://github.com/SlexAxton/messageformat.js

0 голосов
/ 14 марта 2012

Просто сгенерируйте все html со стороны сервера и используйте метки для языков. Я делаю это с PHP и использую knockoutjs и sammyjs. HTML использует метки для всех языков, и у меня есть разные файлы PHP для каждого языка, содержащие все метки и их значения на этом языке.

Недостатком этого решения является то, что вам, вероятно, потребуется перезагрузить страницу при смене языка (возможно, только недостатком, если вы собираетесь использовать одностраничное приложение).

0 голосов
/ 13 марта 2012

Я думаю, вы обнаружите, что существует много JavaScripts, которые отвечают вашим потребностям. Если вы хотите получить краткий обзор того, что чувствуют различные фреймворки, я бы порекомендовал взглянуть на проект TodoMVC , где одно и то же приложение было реализовано в 18 различных фреймворках JavaScript, включая те, для которых вы пометили теги. этот вопрос. Я только что добавил реализацию GWT к этому проекту - и GWT - технология, которую, я думаю, стоит рассмотреть. Он имеет множество корпоративных функций, таких как встроенный i18n, плюс использование строго типизированного языка Java облегчает повторное использование намного .

...