Příklad internacionalizace (i18n) a lokalizace (L10n) Spring MVC

Úvod do problematiky

Internacionalizace (i18n) a lokalizace (L10n) představují klíčové aspekty při vývoji webových aplikací, které usilují o oslovení uživatelů z celého světa. Tyto procesy umožňují přizpůsobit aplikaci pro různé kultury a jazyky, což zlepšuje uživatelskou zkušenost a rozšiřuje dosah aplikace. Framework Spring MVC nabízí efektivní nástroje pro i18n a L10n, umožňující vývojářům snadno vytvářet aplikace, které se dokáží přizpůsobit různým jazykovým a kulturním prostředím.

V tomto článku se podíváme na implementaci i18n a L10n v Spring MVC na konkrétním příkladu. Zaměříme se na vytvoření jednoduché aplikace, která bude zobrazovat textové zprávy v různých jazycích v závislosti na preferencích uživatele.

Internacionalizace (i18n) – příprava na překlad

Internacionalizace (i18n) je proces, který připravuje aplikaci pro překlad do různých jazyků. Zahrnuje modifikaci kódu tak, aby byl nezávislý na jazyku, a vytváření souborů s překlady pro jednotlivé jazykové verze.

Zajištění jazykové nezávislosti kódu

Pro dosažení jazykové nezávislosti kódu je nutné oddělit texty od zdrojového kódu aplikace. To se obvykle provádí pomocí systému klíč-hodnota, kdy jsou texty uloženy v externích souborech a v kódu jsou nahrazeny klíči. Tyto klíče pak slouží k načítání správných textů v závislosti na zvoleném jazyce.

Spring MVC k tomu poskytuje rozhraní MessageSource a jeho standardní implementaci ResourceBundleMessageSource. Tyto komponenty umožňují načítání textů ze souborů s překlady. Typicky se používají soubory ve formátu properties.

Tvorba souborů s překlady

Soubory s překlady jsou textové soubory, které obsahují definice klíčů a k nim přiřazené textové hodnoty v daném jazyce. Jména souborů obvykle odpovídají jazykovým kódům. Například soubor pro angličtinu se jmenuje messages_en.properties, pro češtinu messages_cs.properties.

Každý řádek v souboru reprezentuje jednu položku, která se skládá z klíče a příslušné přeložené hodnoty, oddělené znakem rovnítko. Příklad:


welcome.message=Vítejte

Lokalizace (L10n) – přizpůsobení konkrétnímu prostředí

Lokalizace (L10n) je proces, který přizpůsobuje aplikaci pro konkrétní region nebo jazyk. Zahrnuje nejen překlad textů, ale také formátování dat, čísel, měn a další aspekty, které se liší v různých kulturách.

Překlad textových prvků

Pro překlad textů aplikace do různých jazyků se využívají různé nástroje, například CAT (Computer-Assisted Translation) nástroje, nebo je provádí ruční překlad. Důraz je kladen na přesnost a konzistenci překladů.

Formátování dat a čísel

Formátování dat a čísel se liší v závislosti na lokalitě. Aplikace by měla být schopna automaticky přizpůsobit formátování podle preferencí uživatele. Spring MVC používá třídu LocaleContextHolder pro získání aktuálního nastavení lokalizace a poskytuje nástroje pro formátování dat a čísel podle tohoto nastavení.

Kulturní úpravy

Lokalizace zahrnuje i další kulturní úpravy, jako je změna měny, jednotek měr a formátu data. Aplikace by měla být schopna konfigurace těchto aspektů v závislosti na aktuálně zvolené lokalitě.

Ukázky implementace v Spring MVC

1. Konfigurace MessageSource


<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>

2. Načtení zprávy v kontroleru


@Controller
public class MyController {

@Autowired
private MessageSource messageSource;

@GetMapping("/")
public String homePage(@RequestParam(required = false) String lang, Model model) {
String message = messageSource.getMessage("welcome.message", null, LocaleContextHolder.getLocale());
model.addAttribute("message", message);
return "home";
}
}

3. Formátování čísel v kontroleru


@Controller
public class MyController {

@GetMapping("/numbers")
public String numbersPage(@RequestParam(required = false) String lang, Model model) {
BigDecimal number = new BigDecimal("123456789.12345");
NumberFormat numberFormat = NumberFormat.getNumberInstance(LocaleContextHolder.getLocale());
String formattedNumber = numberFormat.format(number);
model.addAttribute("formattedNumber", formattedNumber);
return "numbers";
}
}

Závěr

Internacionalizace a lokalizace jsou klíčové pro vytváření webových aplikací, které jsou dostupné globálnímu publiku. Spring MVC poskytuje rozsáhlou podporu pro i18n a L10n, usnadňuje vývojářům vytvářet aplikace, které mohou být přeloženy do mnoha jazyků a přizpůsobeny různým kulturním prostředím.

Díky oddělení textu od kódu, použití souborů s překlady a správě lokálních nastavení, mohou aplikace postavené na Spring MVC snadno přizpůsobovat uživatelský zážitek různým kulturám a jazykům, což vede ke zvýšené spokojenosti uživatelů a širšímu dosahu aplikace.

Často kladené dotazy

1. Jaký je rozdíl mezi i18n a L10n?
I18n je proces přípravy aplikace na překlad do různých jazyků, zatímco L10n je proces přizpůsobení aplikace konkrétnímu regionu, včetně překladu, formátování dat a dalších kulturních adaptací.

2. Jaké jsou hlavní výhody i18n a L10n?
I18n a L10n umožňují aplikacím oslovit globální publikum, zlepšují uživatelskou zkušenost a zvyšují dosah aplikace na mezinárodním trhu.

3. Jak efektivně organizovat soubory s překlady?
Soubory s překlady by měly být organizovány podle jazyka a regionu. Doporučuje se vytvořit například adresář resources/messages a v něm podadresáře pro každý jazyk (např. resources/messages/en, resources/messages/cs).

4. Jak nastavit výchozí lokalizaci pro Spring MVC aplikaci?
Výchozí lokalizaci můžete nastavit pomocí třídy LocaleContextResolver. Například:


public class MyLocaleResolver implements LocaleContextResolver {

@Override
public Locale resolveLocaleContext(HttpServletRequest request) {
String lang = request.getParameter("lang");
if (lang != null) {
return new Locale(lang);
} else {
return LocaleContextHolder.getLocale();
}
}
}

5. Jak přidat podporu pro více jazyků na webovou stránku?
Pro podporu více jazyků je vhodné použít rozbalovací menu nebo přepínač jazyků, který umožní uživateli vybrat preferovanou jazykovou verzi.

6. Jak zajistit konzistenci překladů v Spring MVC aplikaci?
Pro zajištění konzistence překladů se doporučuje využívat překladové nástroje, případně překladatelské agentury.

7. Jaké jsou obvyklé obtíže spojené s i18n a L10n?
Mezi běžné problémy patří překlad kontextově závislých výrazů, kulturní citlivost a nutnost udržování překladů v aktuálním stavu.

8. Jaké nástroje lze využít pro i18n a L10n v Spring MVC?
Spring MVC podporuje použití CAT nástrojů pro překlad, jako je například Lokalise nebo Crowdin.