Лучший способ реализовать мультиязык/глобализацию в большом проекте.NET

В итоге я объединил два из них, чтобы немного поработать, двигаясь как на большие, так и на большие расстояния. Я получаю довольно последовательные результаты, но это, вероятно, может быть немного изменено кем-то умнее меня, чтобы работать по-разному для разных размеров и т. Д.

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

function ArrayMove(array, from, to) {
    if ( Math.abs(from - to) > 60) {
        array.splice(to, 0, array.splice(from, 1)[0]);
    } else {
        // works better when we are not moving things very far
        var target = array[from];
        var inc = (to - from) / Math.abs(to - from);
        var current = from;
        for (; current != to; current += inc) {
            array[current] = array[current + inc];
        }
        array[to] = target;    
    }
}

http://jsperf.com/arraymove-many-sizes

74
задан Rich Seller 21 July 2009 в 19:27
поделиться

8 ответов

Я видел, что проекты реализовали использование многих разных подходов, у каждого есть их достоинства и недостатки.

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

я сказал бы метод ресурса, который Вы выбрали имеет много смысла. Было бы интересно видеть ответы других людей также, как я часто задаюсь вопросом, существует ли лучший способ сделать вещи как это. Я видел многочисленные ресурсы что вся точка к методу ресурсов использования, включая один прямо здесь на ТАК .

20
ответ дан Community 24 November 2019 в 12:03
поделиться

+1 База данных

Формы в Вашем приложении могут даже снова перевести себя на лету, если исправления сделаны к базе данных.

Мы использовали систему, где все средства управления были отображены в XML-файле (один на форму) к идентификаторам ресурса языка, но все идентификаторы были в базе данных.

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

единственные, где приложение больше принимает участие, - когда фаза с точками вставки используется.

программное обеспечение для перевода базы данных было Вашим основным экраном обслуживания CRUD с различными опциями рабочего процесса упростить прохождение через недостающих переводов, и т.д.

4
ответ дан Cade Roux 24 November 2019 в 12:03
поделиться

Я не думаю, что существует "лучший способ". Это действительно будет зависеть от технологий и типа приложения, которое Вы создаете.

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

Microsoft WinForm и гуру WPF рекомендуют использовать отдельные сборки ресурсов, настроенные для каждой локали.

способность WPF измерить элементы UI к содержанию понижает требуемую разметку, например: (японские слова намного короче, чем английский язык).

, Если Вы рассматриваете WPF: я предлагаю читать эту статью MSDN, Чтобы быть правдивым, я нашел инструменты локализации WPF: msbuild, locbaml, (и возможно электронная таблица Excel) утомительный для использования но это действительно работает.

Что-то незначительно имело отношение: типичная проблема, с которой я сталкиваюсь, интегрирует унаследованные системы, которые отправляют сообщения об ошибках (обычно на английском языке), не коды ошибки. Это вызывает или изменения в унаследованных системах или отображающиеся строки бэкенда к моим собственным кодам ошибки и затем к локализованным строкам... yech. Коды ошибки являются другом локализаций

5
ответ дан MW_dev 24 November 2019 в 12:03
поделиться

Можно использовать коммерческие инструменты как Sisulizer. Это создаст сборку-сателлит для каждого языка. Только вещь, необходимо обратить внимание, не состоит в том, чтобы запутать имена классов формы (при использовании obfuscator).

2
ответ дан Davorin 24 November 2019 в 12:03
поделиться

Я пошел бы с несколькими файлами ресурсов. Это не должно быть это трудно для конфигурирования. На самом деле я недавно ответил на подобный вопрос на установке глобальные основанные на языке файлы ресурсов в сочетании с файлами ресурсов языка формы.

Локализация в Visual Studio 2008

я полагал бы что лучший подход, по крайней мере, для разработки WinForm.

2
ответ дан Community 24 November 2019 в 12:03
поделиться

Использование проектов самое с открытым исходным кодом GetText с этой целью. Я не знаю, как и использовалось ли это когда-либо на.Net проекте прежде.

0
ответ дан Vasil 24 November 2019 в 12:03
поделиться

Мы используем пользовательского поставщика для многоязыковой поддержки и помещаем все тексты в таблицу базы данных. Это работает хорошо кроме, мы иногда сталкиваемся с кэширующимися проблемами при обновлении текстов в базе данных, не обновляя веб-приложение.

0
ответ дан Cossintan 24 November 2019 в 12:03
поделиться

Стандартные файлы ресурсов легче. Однако, если у Вас есть какие-либо языковозависимые данные, такие как таблицы поиска тогда, необходимо будет управлять двумя наборами ресурсов.

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

http://msdn.microsoft.com/en-us/library/aa905797.aspx

я также нашел эту реализацию:

Поставщик DBResource

0
ответ дан Ben Dempsey 24 November 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: