Skip to content

Локали (Locale)

Подсистема Locale предоставляет удобный способ централизованного хранения текстового контента приложения для поддержки множественных языков.

Быстрый старт

#include <wui/locale/locale.hpp>

// Установка локали из файла (Linux/macOS)
auto ok = wui::set_locale_from_file(wui::locale_type::ru, "ru", "res/ru.json");
if (!ok) {
    std::cerr << "can't load locale" << std::endl;
    return -1;
}

// Использование
std::string greeting = wui::locale("greeting", "hello"); // "Здравствуйте"

API

set_locale_from_file

bool set_locale_from_file(locale_type type, std::string_view name, std::string_view file_name);

Параметры: - type — тип локали (например, locale_type::ru, locale_type::en) - name — имя локали - file_name — путь к JSON-файлу с локалью

Возвращает: true в случае успеха

set_locale_from_json

bool set_locale_from_json(locale_type type, std::string_view name, std::string_view json);

Параметры: - type — тип локали - name — имя локали - json — JSON-строка с локалью

Возвращает: true в случае успеха

set_locale_from_resource (Windows only)

bool set_locale_from_resource(locale_type type, std::string_view name, 
                              int32_t resource_index, std::string_view resource_section);

Параметры: - type — тип локали - name — имя локали - resource_index — ID ресурса - resource_section — секция ресурсов (например, "JSONS")

Возвращает: true в случае успеха

get_locale

std::shared_ptr<i_locale> get_locale();

Возвращает: Указатель на текущий экземпляр локали по умолчанию

locale

const std::string &locale(std::string_view section, std::string_view value);

Параметры: - section — секция (например, "button", "dialog") - value — ключ значения (например, "cancel", "ok")

Возвращает: Ссылку на строку из текущей локали

Пример:

std::string cancel_text = wui::locale("button", "cancel"); // "Отмена"
std::string title = wui::locale("dialog", "settings_title"); // "Настройки"

set_locale_value

void set_locale_value(std::string_view section, std::string_view value, std::string_view str);

Параметры: - section — секция - value — ключ - str — устанавливаемая строка

Позволяет динамически устанавливать значения локали во время выполнения.

Формат JSON

Пример файла локали:

{
  "button": {
    "ok": "OK",
    "cancel": "Отмена",
    "apply": "Применить"
  },
  "dialog": {
    "settings_title": "Настройки",
    "about_title": "О программе"
  },
  "message": {
    "error": "Ошибка",
    "warning": "Предупреждение",
    "info": "Информация"
  }
}

Интерфейс i_locale

class i_locale
{
public:
    virtual std::string get_name() const = 0;

    virtual void set_value(std::string_view section, std::string_view value, 
                          std::string_view str) = 0;
    virtual const std::string &get_value(std::string_view section, 
                                        std::string_view value) const = 0;

#ifdef _WIN32
    virtual void load_resource(int32_t resource_index, 
                              std::string_view resource_section) = 0;
#endif
    virtual void load_json(std::string_view json) = 0;
    virtual void load_file(std::string_view file_name) = 0;

    virtual bool is_ok() const = 0;

    virtual ~i_locale() {}
};

get_name

Возвращает: Имя экземпляра локали (например, "ru", "en")

set_value

Параметры: - section — секция - value — ключ - str — устанавливаемая строка

Устанавливает строковое значение для секции и ключа.

get_value

Параметры: - section — секция - value — ключ

Возвращает: Ссылку на строковое значение

load_json / load_file / load_resource

Загружает локаль из JSON-строки, файла или ресурса.

is_ok

Возвращает: true, если локаль загружена успешно

Переключение языка

Для переключения языка во время выполнения:

// Загрузка английской локали
wui::set_locale_from_file(wui::locale_type::en, "en", "res/en.json");

// Все контролы автоматически обновят текст
// или обновите их вручную при необходимости

См. также