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