Internationalisierung (i18n) in Kotlin: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Internationalisierung (i18n) in Kotlin: Von den Grundlagen zu fortgeschrittenen Techniken



Internationalisierung (abgekürzt i18n – vom englischen „internationalization“, wobei 18 die Anzahl der Buchstaben zwischen dem ersten „i“ und dem letzten „n“ ist) ist der Prozess der Softwareentwicklung, bei dem die Software so gestaltet wird, dass sie leicht an verschiedene Sprachen und regionale Standards angepasst werden kann, ohne dass Änderungen am Code erforderlich sind. Für Kotlin als moderne Multiplattform-Sprache ist die Unterstützung von i18n besonders wichtig, da Anwendungen darauf auf Android, im Backend (JVM), im Web (Kotlin/JS) und auf nativen Plattformen (Kotlin/Native) laufen.



In diesem Artikel betrachten wir, wie man die Internationalisierung in Kotlin-Projekten sinnvoll organisiert: von grundlegenden Ansätzen mit Ressourcendateien bis hin zu fortgeschrittenen Lösungen mit Hilfsbibliotheken.



1. Grundlegender Ansatz: Ressourcendateien (ResourceBundle)

Die einfachste und gebräuchlichste Methode ist die Verwendung der standardmäßigen Java-Mechanismen ResourceBundle und Eigenschaftendateien (.properties). Diese Methode funktioniert hervorragend für JVM-Projekte (Android, Spring Boot, Konsolenanwendungen).



Schritt 1. Lokalisierungsdateien erstellen

Erstellen Sie in den Ressourcen des Projekts Dateien wie messages.properties (Standard) und messages_ru.properties (für Russisch):



# messages.properties (Englisch, Standardsprache)greeting=Hello, {0}!farewell=Goodbye, {0}!app.title=My Application

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


Schritt 2. In Kotlin laden und verwenden

Erstellen Sie ein Hilfsobjekt für die Arbeit mit der Lokalisierung:



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() { // Standardmäßig Englisch verwenden println(I18n.get("greeting", "Alice")) // Hello, Alice!

// Auf Russisch umschalten I18n.setLocale(Locale("ru")) println(I18n.get("greeting", "Алиса")) // Привет, Алиса!}


2. Bibliothek kotlin-i18n (von JetBrains)

Für Kotlin Multiplatform gibt es die offizielle Bibliothek kotlin-i18n, die eine einheitliche Arbeit mit Übersetzungen auf allen Plattformen ermöglicht. Sie verwendet das Gettext PO-Format (Portable Object), das für Übersetzer praktisch ist.



Installation (Gradle)

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


Anwendungsbeispiel

import org.jetbrains.kotlinx.i18n.*

fun main() { // Übersetzer mit Laden aus PO-Dateien erstellen val translator = Translator( bundleName = "messages", locale = Locale("ru") )

// Mit Parameterersetzung verwenden val message = translator.translate( "greeting", "Мир" ) println(message) // Привет, Мир!}


Vorteile: Unterstützung von Pluralformen, Übersetzungskontexten, funktioniert auf allen Kotlin-Plattformen.



3. Fortgeschrittener Ansatz: Bibliothek ok-i18n

Für Projekte, die Flexibilität und Integration mit DI-Containern (z. B. Koin oder Dagger) erfordern, eignet sich die Bibliothek ok-i18n hervorragend. Sie unterstützt das JSON-Format für Übersetzungen, was bei der Arbeit mit REST-APIs oder Konfigurationsdateien praktisch ist.



Beispiel einer JSON-Übersetzungsdatei (ru.json)

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

Empfehlungen