У меня есть приложение WinForms
, которое я хочу перевести на несколько языков. Однако у меня нет опыта локализации WinForms
приложения, и я нахожу очень противоречивую информацию по этому вопросу.
В принципе, я хочу:
- В исходном коде мне нужен только один файл на каждый язык
- Этот файл компилируется в основное приложение при компиляции — никаких вспомогательных сборок или внешних файлов данных после сборки приложения.
- Пользователь может выбрать язык, мне не нужно/не нужно автоопределение на основе операционной системы
- В основном это должно содержать
strings
иints
, а такжеCultureInfo
Большинство решений, которые я видел, имеют либо один .resx
файл на Form
, либо внешние вспомогательные сборки.
- Должен ли я катить свой собственный?
- Или что-то в фреймворке уже есть?
.net Framework 3.5 SP1
если это имеет значение.
Изменить:
По большей части Visual Studio уже предлагает поддержку того, что мне нужно, но есть две проблемы. Когда я устанавливаю Form.Localizable
в true
, у меня есть хорошая поддержка Designer
, но это генерирует один resx
на Form
. Идея вручную переопределить его в InitializeComponent
терпит неудачу, потому что это написанный дизайнером код, который будет регулярно перезаписываться.
Теоретически я хочу только:
- а) переопределить создание
ComponentResourceManager
, чтобы указать его на мой глобальныйresx
и - б) изменить вызов
ApplyResources
на перегрузку, которая принимаетCultureInfo
в качестве третьего параметра.
Кажется, что мне нужно добавить вызов функции в мой конструктор, который вызывается после InitializeComponent()
и переопределяет его поведение. Это кажется ужасно неэффективным, но Visual Studio права, когда предупреждает о касании InitializeComponent()
.
На данный момент я действительно катаю свой собственный WinForms localization Framework
...
geometrically
не экспоненциально. :) количество языков - это множитель, а не показатель степени. :) :) ПРИЧИНА наличия одногоresx
на язык для каждой формы заключается в том, что для определенного языка может потребоваться изменить размер формы, возможно, придется изменить размещение элементов управления, значки, возможно, придется изменить, в основном НИЧЕГО в форме может измениться для каждого языка. Таким образом, файл RESX должен размножаться в любом случае. Строки находятся в том же файле для этой формы, что и все остальное, относящееся к этой форме. - person Jesse Chisholm   schedule 13.05.2015