Найкраща практика створення багатомовної програми в C # / WinForms? [зачинено]


94

Я займався створенням програм, придатних для декількох мов на C #, оскільки мені потрібно працювати над невеликим проектом, де це саме так. Я знайшов в основному два способи зробити це:

Встановіть для властивості Localizable форми значення true, встановіть властивість Language, заповніть усі мітки тощо, і все готово. Основним недоліком, який я бачу в цьому, є: як зробити інші речі, які не є частиною форми, готовими для кількох мов (наприклад, спливаючі вікна, файли журналів чи вікна тощо).

Створіть файл ресурсу, наприклад 'Lang.en-us.resx' і один для кожної мови, наприклад 'Lang.nl-nl.resx', і заповніть його рядками. IDE, здається, автоматично генерує клас для мене, тому в коді я можу просто використовувати Lang.SomeText. Найбільший недолік, який я бачу в цьому, полягає в тому, що для кожної форми мені потрібно самостійно встановити всі мітки та інші підписи в коді (і, здається, прив'язка даних не працює з цими ресурсами).

Однак я впевнений, що для цього є й інші методи.

Отже, яка найкраща практика? Що найпростіше для невеликих додатків (кілька форм, підключення до бази даних тощо) і які масштаби найкраще підходять для великих програм?


3
Я помітив, що неконструктивні (або інші запитання типу "неприпустимі для ТО") є одними з найцінніших питань. використовувати багатомовну надбудову для багатомовної підтримки youtube.com/watch?v=SNIyP1QQdVs
Prokurors

1
Іноді так важко зібрати всі фрагменти знань в Інтернеті, і я вважаю це питання безцінним саме зараз. Звичайно, бувають випадки, коли закриття м'яких питань є менш конструктивним, ніж залишати їх відкритими, і я думаю, це один із таких випадків. :)

Відповіді:


20

Я завжди використовував файли ресурсів для багатомовних програм.
У мережі є багато статей, що пояснюють, як ними користуватися.

Я використав два різних способи:

  • Файл ресурсу для кожної форми
  • Глобальний файл ресурсів

Файл / форма ресурсу легше реалізувати, вам потрібно лише ввести значення у файл ресурсу, але я вважаю, що такий підхід важче підтримувати, оскільки мітки розподілені по всій програмі.

Глобальний файл ресурсів дозволяє централізувати всі мітки (зображення тощо) в одному файлі (на мову), але це означає вручну встановити мітки під завантаження форми. Цей файл також може використовуватися для повідомлень про помилки тощо.

Питання смаку ...

Останнє: я пишу програми англійською та французькою мовами, я використовую "en" та "fr", а не "en-US" та "fr-FR". Не ускладнюйте справи, різні дилектики англійської мови (американська, англійська, австралійська тощо) мають мало достатньо відмінностей, щоб використовувати лише одну (те саме стосується французької мови).


2
Іноді доводиться турбуватися про діалекти. Наприклад, китайські ієрогліфи абсолютно відрізняються у традиційній китайській мові (Тайвань) від спрощеної китайської мови (материкова частина Китаю).
MarkJ

1
Документація @MarkJ MSDN згадує, що традиційна китайська та спрощена китайська - це не діалекти (країна / регіон), а нейтральні культури. Msdn: "Нейтральна культура - це культура, яка пов'язана з мовою, але не з країною / регіоном. Конкретна культура - це культура, яка пов'язана з мовою та країною / регіоном. Наприклад," fr "є нейтральною культура і "fr-FR" - це специфічна культура. Зверніть увагу, що "zh-CHS" (спрощена китайська) та "zh-CHT" (традиційна китайська) є нейтральними культурами ".
широкосмуговий зв’язок

Нещодавно я зробив це за допомогою посилання , там не згадано 2 кроки: 1. Клацніть усі файли .resource та встановіть для властивості "Дія побудови" значення "Вміст". 2. Клацніть усі файли .resource та встановіть для властивості "Копіювати до вихідного каталогу" значення "Копіювати завжди".
Sourav

1
@Kiquenet Для повної відповіді , включаючи широку підтримку .NET (з кодом), см: stackoverflow.com/a/35813707/2901207
CularBytes

9

Нещодавно я написав програму з підтримкою німецької та англійської мов. Я був здивований, дізнавшись, що якщо я просто назвав свої англійські ресурси LanguageResources.resx та свої німецькі ресурси LanguageResources.de.resx, він автоматично обрав правильну мову. ResXFileCodeGenerator подбав про все це для мене.

Зауважте, що поля в двох файлах були однаковими, і будь-які ще не введені німецькі поля відображатимуться у програмі як англійська, оскільки найбільш неспецифічною мовою файлу є файл за замовчуванням. При пошуку рядка він переходить від найбільш конкретного (напр. .De-DE.resx) до найменш конкретного (напр. .Resx).

Щоб отримати свої рядки, використовуйте виклики ResourceManager.GetString або ResourceManager.GetObject. Додаток повинен безкоштовно надати вам ResourceManager.


6

На користь інших, хто може зіткнутися з цим (більше 1 року після останнього допису), я автор професійного продукту локалізації, який надзвичайно полегшує весь процес перекладу. Це надбудова Visual Studio, яка витягує всі рядки ".resx" з будь-якого довільного рішення та завантажує їх в один файл, який можна перекласти за допомогою безкоштовної окремої програми (перекладачі можуть завантажити це з мого сайту). Потім ця сама надбудова імпортує перекладені рядки назад у ваше рішення. Надзвичайно простий у використанні з безліччю вбудованих запобіжників, безліччю наворотів та онлайн-довідки (вона вам особливо не знадобиться). Див. Http://www.hexadigm.com


1
Це слід додати як рідну функцію до visualstudio! Чудове програмне забезпечення!
Каверна

Велике спасибі (оцінено). Я б погодився з вами до запуску продукту (приблизно 10 років тому), але якби MSFT впровадив його сьогодні, це вивело б мене з ладу :)
Ларрі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.