Table of Contents
Příklad internacionalizace (i18n) a lokalizace (L10n) Spring MVC
Úvod
Internacionalizace (i18n) a lokalizace (L10n) jsou důležité aspekty vývoje webových aplikací, které umožňují přizpůsobit aplikace uživatelům z různých kultur a jazyků. Framework Spring MVC poskytuje robustní podporu pro i18n a L10n, což umožňuje vývojářům snadno vytvářet aplikace, které lze přeložit do více jazyků a přizpůsobit pro různá místa.
V tomto článku prozkoumáme přístup i18n a L10n ve Spring MVC pomocí příkladu. Zaměříme se na vytvoření jednoduché webové aplikace, která zobrazí zprávu v různých jazycích v závislosti na požadavku uživatele.
Internacionalizace (i18n)
i18n se týká procesu přípravy aplikace tak, aby mohla být přeložena do více jazyků. Zahrnuje úpravy kódu tak, aby byl jazykově nezávislý, a vytvoření překladových souborů pro různé jazyky.
Vytvoření jazykově nezávislého kódu
Vytvoření jazykově nezávislého kódu vyžaduje oddělení textu od kódu aplikace. To lze provést pomocí mechanismu klíč-hodnota, kde jsou textové řetězce uloženy v překladových souborech a přístup k nim se získává pomocí klíčů.
Spring MVC poskytuje rozhraní MessageSource
a jeho implementaci ResourceBundleMessageSource
pro načítání textových řetězců z překladových souborů. Překladové soubory se obvykle ukládají ve formátu properties.
Vytvoření překladových souborů
Překladové soubory jsou prosté textové soubory, které obsahují klíče a odpovídající přeložené hodnoty. Jsou pojmenovány podle lokalizačního kódu jazyka. Například překladový soubor pro angličtinu by byl pojmenován messages_en.properties
.
Každá položka v překladovém souboru se skládá z klíče, který slouží k identifikaci textového řetězce, a odpovídající přeložené hodnoty. Například:
properties
welcome.message=Vítejte
Lokalizace (L10n)
L10n je proces přizpůsobení aplikace konkrétní lokalitě. Zahrnuje překlad textu aplikace, formátování dat a čísel a další kulturní úpravy.
Překlad textu
K překladu textového obsahu aplikace do různých jazyků lze použít nástroje, jako jsou CAT (nástroje pro překlad s podporou počítače) nebo ruční překlad. Je důležité zajistit přesnost a konzistenci překladů.
Formátování dat a čísel
Různé lokality mají různé standardy pro formátování dat a čísel. Aplikace by měla být schopna upravit formátování tak, aby bylo v souladu s lokalizací uživatele. Spring MVC poskytuje třídu LocaleContextHolder
pro načtení aktuálního místního nastavení a metody pro formátování dat v souladu s místním nastavením.
Kulturní úpravy
L10n také zahrnuje kulturní úpravy, jako je změna měny, měrných jednotek a data formátu. Aplikace by měla být schopna konfigurovat tyto kulturní aspekty podle aktuálního místního nastavení.
Příklady implementace v Spring MVC
1. Konfigurace MessageSource
xml
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
2. Načtení zprávy
java
@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
java
@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 nezbytné pro vytváření webových aplikací, které oslovují globální publikum. Spring MVC poskytuje robustní podporu pro i18n a L10n, což vývojářům usnadňuje vytváření aplikací, které lze přeložit do více jazyků a přizpůsobit pro různá místa.
Díky oddělení textu od kódu a použití překladových souborů a místních nastavení mohou aplikace Spring MVC snadno přizpůsobit uživatelské zkušenosti různým kulturám a jazykům, což vede k lepší uživatelské spokojenosti a rozšířenému dosahu.
Často kladené otázky
1. Jaký je rozdíl mezi i18n a L10n?
i18n se týká přípravy aplikace pro překlad do více jazyků, zatímco L10n se týká přizpůsobení aplikace konkrétní lokalitě, včetně překladu, formátování a kulturních úprav.
2. Jaké jsou výhody i18n a L10n?
i18n a L10n umožňují aplikacím oslovit globální publikum, zlepšují uživatelskou zkušenost a rozšiřují dosah aplikací.
3. Jaké jsou dobré způsoby pro organizaci překladových souborů?
Překladové soubory by měly být organizovány podle jazyka a oblasti. Můžete například vytvořit adresář resources/messages
, ve kterém budete mít oddělené podadresáře pro každý jazyk, například resources/messages/en
a resources/messages/cs
.
4. Jak mohu nakonfigurovat předvolené místní nastavení pro aplikaci Spring MVC?
Předvolené místní nastavení můžete nakonfigurovat pomocí třídy LocaleContextResolver
. Příkladem může být:
java
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 mohu přidat podporu pro více místních nastavení do webové stránky?
Chcete-li přidat podporu pro více místních nastavení, můžete použít rozbalovací nabídku nebo přepínač jazyků, který umožňuje uživatelům vybrat požadované místní nastavení.
6. Jak mohu zajistit konzistenci překladů v aplikaci Spring MVC?
K zajištění konzistence překladů můžete použít nástroje pro kontrolu překladů nebo služby překladatelských agentur.
7. Jaké jsou běžné výzvy spojené s i18n a L10n?
Běžnými výzvami jsou překlady kontextu, kulturní citlivost a udržování aktuálnosti překladů.
8. Jaké nástroje lze použít pro i18n a L10n ve Spring MVC?
Spring MVC podporuje použití nástrojů pro překlad s podporou počítače, jako je Lokalise nebo Crowdin.