Введение
SunnyUI.Localization — это решение для переключения между языками в C# Winform на основе .Net, которое предлагает многоязычную поддержку. Проект использует MIT-лицензию и доступен бесплатно.
Архитектура
Решение включает два основных компонента:
SunnyUI.Localization позволяет легко и быстро загружать и переключать эти ресурсы.
Основные компоненты решения:
Переводчик форм уже поддерживает чтение языковых ресурсов для таких элементов управления, как Button (Кнопка), TextBox (Текстовое поле), Label (Метка), LinkLabel (Ссылка-метка), CheckBox (Флажок), RadioButton (Переключатель), GroupBox (Групповая рамка), RichTextBox (Расширенное текстовое поле), TabControl (Элемент управления вкладками), DataGridView (Сетка данных), MenuStrip (Панель меню), ContextMenuStrip (Контекстное меню), FolderBrowserDialog (Диалоговое окно выбора папки), OpenFileDialog (Диалоговое окно открытия файла) и SaveFileDialog (Диалоговое окно сохранения файла). Также поддерживается чтение ресурсов для элементов управления с использованием свойства Text для хранения языковых данных.
Реализация
// CodeTranslator, наследуется от BaseCodeTranslator<CodeTranslator>
public class CodeTranslator : BaseCodeTranslator<CodeTranslator> {
// [ConfigSection("Form1")] связывает с Form1, ресурсы сохраняются в разделе Form1 ini-файла
[ConfigSection("Form1")]
public string CloseInfo { get; set; }
// [ConfigSection("Form2")] связывает с Form2, ресурсы сохраняются в разделе Form2 ini-файла
[ConfigSection("Form2")]
public string HelloWorld { get; set; }
// Не связано, ресурсы сохраняются в разделе CodeLanguage ini-файла
public string AskCaption { get; set; }
// Не связано, ресурсы сохраняются в разделе CodeLanguage ini-файла
public string InfoCaption { get; set; }
// Установка значений по умолчанию
public override void SetDefault() {
base.SetDefault();
CloseInfo = "Вы действительно хотите выйти из программы?";
HelloWorld = "Привет, мир!";
AskCaption = "Запрос";
InfoCaption = "Информация";
}
}
// Определяем папку с языковыми ресурсами
Define.LanguageDir = "Languages";
// Создаём генератор, используя путь к файлу проекта (*.csproj) и путь к исполняемому файлу (*.exe)
Generator generator = new Generator(
@"C:\Users\Sunny\source\repos\SunnyUI.Localization\SunnyUI.Localization.Demo\SunnyUI.Localization.Demo.csproj",
@"C:\Users\Sunny\source\repos\SunnyUI.Localization\Bin\net40\SunnyUI.Localization.Demo.exe");
// Сохраняем исходный файл ресурсов
string rawFile = generator.Save();
// Генерируем файлы ресурсов для каждой формы на разных языках, можно повторять, существующие файлы не перезаписываются
generator.Save(rawFile, CultureInfos.SimplifiedChinese);
generator.Save(rawFile, CultureInfos.English);
// Генерируем файлы ресурсов кода для каждого языка, можно повторять, существующие файлы не перезаписываются
CodeTranslator.Current.Save(CultureInfos.SimplifiedChinese);
CodeTranslator.Current.Save(CultureInfos.English);
Файлы ресурсов сохраняются в папке с языковыми файлами в каталоге исполняемого файла:
3. Открытие файлов ресурсов и перевод их содержимого:
[Language] Этот раздел не трогать
[Form1] Перевод = последующий текст
[Form2] Перевод = последующий текст
[CodeLanguage] Перевод = последующий текст
В целом, в файле ресурсов можно легко найти ресурсы для пользовательского интерфейса и ресурсы кода.
zh-CN.lang
;<!-- Конфигурационный файл -->
[Language]
Name=zh-CN
ID=2052
NativeName=中文(中国)
DisplayName=中文(简体,中国)
EnglishName=Chinese (Simplified, China)
[Form1]
button1.Text=按钮1
checkBox1.Text=复选框1
Column1.HeaderText=列1
Column2.HeaderText=列2
Column3.HeaderText=列3
menu1ToolStripMenuItem.Text=菜单1
menu2ToolStripMenuItem.Text=菜单2
groupBox1.Text=分组框1
label1.Text=标签1
linkLabel1.Text=链接标签1
tabPage1.Text=页面1
tabPage2.Text=页面2
textBox1.Text=文本
button2.Text=创建多语文件
button3.Text=中文
button4.Text=English
button5.Text=...
Text=演示
radioButton1.Text=单选按钮1
button6.Text=...
menuStrip1.Text=主菜单1
menu1ToolStripMenuItem1.Text=菜单1
menu11ToolStripMenuItem.Text=菜单11
menu12ToolStripMenuItem.Text=菜单12
menu2ToolStripMenuItem1.Text=菜单2
menu21ToolStripMenuItem.Text=菜单21
menu22ToolStripMenuItem.Text=菜单22
folderBrowserDialog1.Description=请选择文件夹
openFileDialog1.FileName=openFileDialog1
openFileDialog1.Title=请选择文件
richTextBox1.Text=你好世界 **Пожалуйста, обратите внимание, что данный текст содержит фрагменты кода и может не полностью соответствовать исходному запросу.**
* * *
**Сохраняем оригинальное форматирование текста:**
«Сохранить файл диалога 1. Заголовок = Введите имя файла»
«Кнопка 7. Текст = Открыть окно»
«CloseInfo = Вы действительно хотите выйти из программы?»
[Форма 2]
«Кнопка 1. Текст = Кнопка 1»
«Текст = Окно 2»
«HelloWorld = Привет, мир!»
[CodeLanguage]
«InfoCaption = Информация»
«AskCaption = Запрос»
en-US.lang
;<!--Конфигурационный файл-->
[Язык]
Имя = en-US
ID = 1033
NativeName = Английский (США)
DisplayName = Английский (Соединённые Штаты Америки)
EnglishName = English (United States)
[Форма 1]
«Кнопка 1. Текст = кнопка 1»
«CheckBox 1. Текст = CheckBox 1»
«Column1.HeaderText = Column1»
«Column2.HeaderText = Column2»
«Column3.HeaderText = Column3»
«Menu1ToolStripMenuItem.Text = Menu1»
«Menu2ToolStripMenuItem.Text = Menu2»
«GroupBox1.Text = GroupBox1»
«Label1.Text = Label1»
«LinkLabel1.Text = LinkLabel1»
«TabPage1.Text = TabPage1»
«TabPage2.Text = TabPage2»
«TextBox1.Text = Text»
«Button2.Text = Создать языковые файлы»
«Button3.Text = Китайский»
«Button4.Text = Английский»
«Button5.Text =...»
«Text = Демо»
«RadioButton1.Text = RadioButton1»
«Button6.Text =...»
«MenuStrip1.Text = menuStrip1»
«Menu1ToolStripMenuItem1.Text = Menu1»
«Menu11ToolStripMenuItem.Text = Menu11»
«Menu12ToolStripMenuItem.Text = Menu12»
«Menu2ToolStripMenuItem1.Text = Menu2»
«Menu21ToolStripMenuItem.Text = Menu21»
«Menu22ToolStripMenuItem.Text = Menu22»
«FolderBrowserDialog1.Description = Пожалуйста, выберите папку»
«OpenFileDialog1.FileName = OpenFileDialog1»
«OpenFileDialog1.Title = Выберите файл»
«RichTextBox1.Text = Hello world!»
«SaveFileDialog1.Title = Введите имя файла»
«Button7.Text = Открыть форму»
«CloseInfo = Вы уверены, что хотите выйти из программы?»
[Форма 2]
«Кнопка 1. Текст = кнопка 1»
«Текст = Форма 2»
«HelloWorld = Hello world!»
[CodeLanguage]
«ИнфоКапшн = Инфо»
«АскКапшн = Аск»
4、Запустите переводчик для реализации многоязычного переключения
Global.CultureInfo = CultureInfos.SimplifiedChinese;
//Чтение ресурсов интерфейса языка и перевод
FormTranslator.Translate(this, Global.CultureInfo);
//Загрузка ресурсов кода языка для использования в коде
CodeTranslator.Current.Load(Global.CultureInfo);
Принцип работы переводчика заключается в чтении файлов ресурсов языка и непосредственном использовании их в коде с помощью отражения для присвоения значений строковым ресурсам интерфейса.
Китайский

Английский

Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )