Kotlin में अंतर्राष्ट्रीयकरण (i18n): पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Интернационализация (i18n) в Kotlin: от основ до продвинутых техник



Интернационализация (сокращённо i18n — от английского "internationalization", где 18 — количество букв между первым "i" и последним "n") — это процесс проектирования программного обеспечения таким образом, чтобы его можно было легко адаптировать к различным языкам и региональным стандартам без изменения кода. Для Kotlin, как современного мультиплатформенного языка, поддержка i18n особенно важна, поскольку приложения на нём работают на Android, бэкенде (JVM), вебе (Kotlin/JS) и нативных платформах (Kotlin/Native).



В этой статье мы рассмотрим, как эффективно организовать интернационализацию в проектах на Kotlin: от базовых подходов с использованием файлов ресурсов до продвинутых решений со вспомогательными библиотеками.



1. Базовый подход: файлы ресурсов (ResourceBundle)

Самый простой и распространённый способ — использование стандартного механизма Java ResourceBundle и файлов свойств (.properties). Этот метод отлично работает для проектов на JVM (Android, Spring Boot, консольные приложения).



Шаг 1. Создайте файлы локализации

В ресурсах проекта создайте файлы messages.properties (по умолчанию) и messages_ru.properties (для русского языка):



# messages.properties (английский, по умолчанию)greeting=Hello, {0}!farewell=Goodbye, {0}!app.title=My Application

# messages_ru.properties (русский)greeting=Привет, {0}!farewell=До свидания, {0}!app.title=Моё приложение


Шаг 2. Загрузка и использование в Kotlin

Создайте вспомогательный объект для работы с локализацией:



import java.text.MessageFormatimport java.util.*

object I18n { private var bundle: ResourceBundle = ResourceBundle.getBundle("messages", Locale.getDefault())

fun setLocale(locale: Locale) { bundle = ResourceBundle.getBundle("messages", locale) }

fun get(key: String, vararg args: Any?): String { val pattern = bundle.getString(key) return MessageFormat.format(pattern, *args) }}

fun main() { // По умолчанию используем английский println(I18n.get("greeting", "Alice")) // Hello, Alice!

// Переключаемся на русский I18n.setLocale(Locale("ru")) println(I18n.get("greeting", "Алиса")) // Привет, Алиса!}


2. Библиотека kotlin-i18n (от JetBrains)

Для Kotlin Multiplatform существует официальная библиотека kotlin-i18n, которая позволяет работать с переводами единообразно на всех платформах. Она использует формат Gettext PO (Portable Object), удобный для переводчиков.



Установка (Gradle)

repositories {    mavenCentral()}dependencies {    implementation("org.jetbrains.kotlinx:kotlin-i18n:0.1.0")}


Пример использования

import org.jetbrains.kotlinx.i18n.*

fun main() { // Создаём переводчик, загружающий PO-файлы val translator = Translator( bundleName = "messages", locale = Locale("ru") )

// Используем с подстановкой параметров val message = translator.translate( "greeting", "Мир" ) println(message) // Привет, Мир!}


Преимущества: поддержка множественных форм (plural forms), контекстов переводов, работа на всех платформах Kotlin.



3. Продвинутый подход: библиотека ok-i18n

Для проектов, где нужна гибкость и интеграция с DI-контейнерами (например, Koin или Dagger), отлично подходит библиотека ok-i18n. Она поддерживает формат JSON для переводов, что удобно при работе с REST API или конфигурационными файлами.



Пример файла переводов JSON (ru.json)

{  "app": {    "title": "Мо                    

अनुशंसाएँ