Разный рекс для разных развертываний C#

Я использую встроенный ресурс, сгенерированный PublicResXFileGenerator, который генерирует мой класс ResourceManager. Я пытаюсь найти способ поддержки нескольких файлов resx для одного и того же языка или каким-либо образом изменить его из развернутого приложения, но это кажется невозможным.

Например, клиент 'x' использует перевод en-US:

  • Плоский

а другой клиент y использует перевод en-US:

  • Апартаменты

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

Является ли это возможным?

Примечание: мой код написан на C#.

1 ответ

Строки в вашем файле ресурсов по умолчанию (вероятно, Resources.resx) встроены в ваш исполняемый файл.

Если вы определите файл ресурсов для конкретного языка (например, Resources.en-US.resx), Visual Studio автоматически создаст сателлитную DLL, содержащую локализованные ресурсы.

То же самое применяется, если вы добавляете локализованные ресурсы в форму WinForms, как показано здесь для Form1.

введите описание изображения здесь

Спутниковая DLL создается в подкаталоге каталога bin. DLL должна быть развернута на целевом компьютере в подкаталоге с точно таким же именем.

введите описание изображения здесь

Это работает для локализованных строк на любом языке, но работает точно так же для строк на текущем языке по умолчанию.

Если текущим значением по умолчанию является en-US, и для en-US есть сателлитная DLL, и она содержит необходимые ресурсы, тогда.NET Framework будет автоматически использовать ресурсы из сателлитной DLL.

Если вам не нужны ресурсы из сателлитной DLL, нет проблем. Не размещайте его на целевой машине. Затем.NET Framework будет использовать ресурсы по умолчанию, которые встроены в исполняемый файл.

Если у вас есть только два варианта, то в Visual Studio легко управлять с помощью файла ресурсов по умолчанию и файла ресурсов в США. Если у вас более двух вариантов, вам понадобится стратегия для генерации ресурсов. Самым простым способом, вероятно, было бы неправильно использовать другой язык.

В качестве альтернативы, вы можете использовать какой-то другой инструмент. Винрес может сделать эту работу, но я не уверен на 100%.

Технически, вы можете определить собственные культуры, например, en-US-medical или en-US-legal, но, по моему опыту, это гораздо сложнее, чем стоит. Я не думаю (только мое мнение), что Microsoft твердо придерживается этой концепции.

Другие вопросы по тегам