1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yhuse-SunnyUI.Localization

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

SunnyUI.Localization — это решение для переключения между языками в C# Winform на основе .Net, которое предлагает многоязычную поддержку. Проект использует MIT-лицензию и доступен бесплатно.

Архитектура

Решение включает два основных компонента:

  • Строковые ресурсы для интерфейса пользователя.
  • Строковые ресурсы для кода программы.

SunnyUI.Localization позволяет легко и быстро загружать и переключать эти ресурсы.

Основные компоненты решения:

  • Translator (Переводчик) — обеспечивает переключение между языками с помощью FormTranslator (Переводчик форм) и CodeTranslator (Переводчик кода).
  • Generator (Генератор) — создаёт файлы конфигурации на основе содержимого файлов форм и настроек CodeTranslator. Эти файлы используются для перевода и предоставляются переводчику.

Переводчик форм уже поддерживает чтение языковых ресурсов для таких элементов управления, как Button (Кнопка), TextBox (Текстовое поле), Label (Метка), LinkLabel (Ссылка-метка), CheckBox (Флажок), RadioButton (Переключатель), GroupBox (Групповая рамка), RichTextBox (Расширенное текстовое поле), TabControl (Элемент управления вкладками), DataGridView (Сетка данных), MenuStrip (Панель меню), ContextMenuStrip (Контекстное меню), FolderBrowserDialog (Диалоговое окно выбора папки), OpenFileDialog (Диалоговое окно открытия файла) и SaveFileDialog (Диалоговое окно сохранения файла). Также поддерживается чтение ресурсов для элементов управления с использованием свойства Text для хранения языковых данных.

Реализация

  1. Определение CodeTranslator:
// 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 = "Информация";
    }
}
  1. Создание генератора и сохранение файлов ресурсов:
    // Определяем папку с языковыми ресурсами
    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);

Принцип работы переводчика заключается в чтении файлов ресурсов языка и непосредственном использовании их в коде с помощью отражения для присвоения значений строковым ресурсам интерфейса.

Демонстрация

Китайский

![Введите изображение](https://images.gitee.com/uploads/images/2021/0909/162727_8efd9ed5_416720.png «Экранный снимок.png»)

Английский

![Введите изображение](https://images.gitee.com/uploads/images/2021/0909/162745_a87126b2_416720.png «Экранный снимок.png»)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

SunnyUI.Localization — это решение для многоязычного переключения на основе C# Winform, созданное на платформе .Net. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yhuse-SunnyUI.Localization.git
git@api.gitlife.ru:oschina-mirror/yhuse-SunnyUI.Localization.git
oschina-mirror
yhuse-SunnyUI.Localization
yhuse-SunnyUI.Localization
master