У меня есть приложение WinForms, которое я хочу перевести на несколько языков. Однако у меня нет опыта локализации приложения WinForms, и я нахожу очень противоречивую информацию по этому вопросу.
По сути, я хочу:
- В исходном коде я хочу только один файл на язык
- этот файл компилируется в основное приложение при компиляции - после сборки приложения нет спутниковых сборок или внешних файлов данных
- Пользователь может выбрать язык, мне не нужно / нужно автоопределение на основе операционной системы
- Это должно содержать в основном строки и целые, а также CultureInfo
Большинство решений, которые я видел, имеют один файл .resx на форму и / или внешние сателлитные сборки.
Должен ли я кататься самостоятельно? Или что-то уже есть в рамках?
.net Framework 3.5 SP1, если это имеет значение.
Редактировать: По большей части Visual Studio уже предлагает поддержку того, что я хочу, но есть две проблемы. Когда я устанавливаю для Form.Localizable значение true, у меня появляется эта замечательная дизайнерская поддержка, но она генерирует один resx на форму. Идея ручного переопределения в InitializeComponent не работает, потому что это код, написанный дизайнером, который будет регулярно перезаписываться. Теоретически, я только хочу а) переопределить создание ComponentResourceManager, чтобы он указывал на мой глобальный resx, и б) изменить вызов ApplyResources на перегрузку, которая принимает CultureInfo в качестве третьего параметра.
Кажется, мне нужно добавить вызов функции в мой конструктор, который вызывает вызывается после InitializeComponent () и переопределяет его поведение. Это кажется ужасно неэффективным, но Visual Studio прав, когда предупреждает о касании InitializeComponent. В настоящий момент я действительно работаю над своей собственной средой локализации WinForms ...