Интернационализация в .NET. База данных управляется? Ресурсы в интерактивном режиме? - PullRequest
0 голосов
/ 13 апреля 2011

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

Итак, первая мысль состояла в том, чтобы создать базу данных с тремя таблицами:

Label     Translation          Language
-----     -----------          --------
id         id                  id
name       keyname_id          name
filename   language_id
           value

А затем создайте пользовательский интерфейс, чтобы вы могли позволить клиенту сначала выбрать имя файла страницы, которую вы хотите перевести, метку, а затем выбрать нужный язык и перевести его, и оно будет сохранено в таблице переводов. , Я вижу здесь проблему: Как бы я взял со страницы все ярлыки?

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

Итак, что вы думаете об этих двух подходах? Что лучше для вас? Может быть, есть третий подход, который проще?


РЕДАКТИРОВАТЬ: Я также нашел эту ссылку о Модель поставщика ресурсов . Что вы думаете об этом? Может быть, это может быть полезно, но я не знаю, может быть, это слишком много для моих целей. Я думаю, с чего начать

1 Ответ

0 голосов
/ 25 апреля 2013

В LedgerSMB мы использовали следующий подход:

  1. Строки приложения (и строки в коде) переводятся стандартным каркасом i18n (в основном GNU gettext).

  2. Бизнес-данные получают ручной перевод в базу данных.Таким образом, вы можете добавлять переводы к названиям отделов, проектам, описаниям товаров и услуг и т. Д.

Наш подход к проблеме, о которой вы говорите, состоит в том, чтобы объединить другие таблицы, поэтому у нас может быть:

CREATE TABLE parts (
   id int primary key.... -- autoincrements but not relevant to this example
   description text,
   ...
);

CREATE TABLE language (
   code varchar(5) primary key, -- like en_US
   name text unique,
);

CREATE TABLE parts_translation (
   parts_id int not null references parts(id),
   language_code varchar(5) not null references language(code),
   translation text
);

Затем мы можем выполнить запрос на основе нужного языка во время выполнения.

...