Java i18n (Uluslararasılaştırma) Rehberi: Farklı Dil Desteği Nasıl Eklenir? 🌍
🧠 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, Java uygulamalarınızı farklı dil ve bölgelere (Locale) göre uyarlayarak çok dilli hale getirmeyi öğreneceksiniz.
ResourceBundle ve Locale sınıflarıyla metin, para birimi ve tarih biçimlerini bölgesel ayarlara göre nasıl yöneteceğinizi adım adım göreceksiniz.
Ayrıca, özellik dosyalarının (properties) nasıl isimlendirileceğini, farklı Locale’lerin nasıl yükleneceğini ve i18n yapısının web uygulamalarında nasıl kullanılabileceğini öğreneceksiniz.
🌐 Java i18n ve Locale Kavramı
Internationalization (i18n), bir uygulamanın farklı diller ve bölgeler için uygun hale getirilmesi sürecidir.
Java bu desteği ResourceBundle sınıfı aracılığıyla sağlar.
Her bölge için özel özellik dosyaları (properties) oluşturulur ve bu dosyalar Locale bilgisine göre otomatik olarak yüklenir.
🧩 Özellik Dosyası İsimlendirme Kuralı
Dosya adları şu kalıbı izler:
<dosyaAdı><dilKodu><ülkeKodu>.properties
| Örnek Dosya Adı | Açıklama |
|:-----------------|:----------|
| `ApplicationMessages.properties` | Varsayılan dil dosyası (Locale belirtilmezse bu yüklenir) |
| `ApplicationMessages_fr_FR.properties` | Fransızca (Fransa) |
| `ApplicationMessages_tr_TR.properties` | Türkçe (Türkiye) |
🛠️ Adım 1: Farklı Locale Dosyalarını Oluştur
🇺🇸 Varsayılan (U.S.)
# ApplicationMessages.properties
UlkeAdi=Amerika Birleşik Devletleri
ParaBirimiKodu=USD
🇫🇷 Fransızca (Fransa)
# ApplicationMessages_fr_FR.properties
UlkeAdi=France
ParaBirimiKodu=Euro
🇸🇪 İsveççe (İsveç)
# ApplicationMessages_sv_SE.properties
UlkeAdi=Sverige
ParaBirimiKodu=Kr
💬 Not: Tüm dosyalar proje classpath’i içinde, aynı dizinde yer almalıdır.
💻 Adım 2: ResourceBundle ile Mesajları Yükleme
Aşağıdaki örnek, üç farklı Locale için özellik dosyalarını yükler ve mesajları ekrana yazar.
import java.util.Locale;
import java.util.ResourceBundle;
public class RabisuI18nOrnek {
public static void main(String[] args) {
// 1️⃣ Varsayılan Locale
ResourceBundle paketVarsayilan = ResourceBundle.getBundle("ApplicationMessages");
// 2️⃣ Ön tanımlı Locale (Fransa)
ResourceBundle paketFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
// 3️⃣ Manuel Locale oluşturma (İsveççe)
ResourceBundle paketSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
mesajlariYazdir(paketVarsayilan);
mesajlariYazdir(paketFR);
mesajlariYazdir(paketSWE);
}
private static void mesajlariYazdir(ResourceBundle bundle) {
System.out.println(bundle.getString("UlkeAdi"));
System.out.println(bundle.getString("ParaBirimiKodu"));
}
}
💬 Açıklama: ResourceBundle, verilen Locale bilgisine göre uygun dosyayı yükler ve anahtarlara karşılık gelen metinleri döndürür.
🧾 Örnek Çıktı
Amerika Birleşik Devletleri
USD
France
Euro
Sverige
Kr
💬 Yorum: Eğer istenen Locale için dosya bulunamazsa, Java otomatik olarak varsayılan dosyayı (ApplicationMessages.properties) yükler.
⚙️ Adım 3: Locale Sınıfının Kullanımı
Locale sınıfı, belirli bir dil ve ülke bilgisini temsil eder. Java’da bazı Locale’ler ön tanımlıdır (Locale.FRANCE, Locale.US), ancak özel Locale de oluşturabilirsiniz.
Locale turkce = new Locale("tr", "TR");
ResourceBundle bundleTR = ResourceBundle.getBundle("ApplicationMessages", turkce);```
💬 Açıklama: Bu kod, ApplicationMessages_tr_TR.properties dosyasını yükler.
🔄 Adım 4: Web Uygulamalarında Dinamik Locale
Kullanıcının tarayıcı dili veya tercihine göre otomatik Locale seçimi yapılabilir.
Locale kullaniciLocale = request.getLocale();
ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages", kullaniciLocale);
💬 Açıklama: Bu yöntem, web uygulamalarında kullanıcının tarayıcı dilini algılayarak dinamik metinler sunar.
📚 Sıkça Sorulan Sorular (SSS)
- Locale nedir ve nasıl oluşturulur?
Locale, bir dili ve ülkeyi temsil eden Java nesnesidir. new Locale("tr", "TR") şeklinde veya Locale.TURKEY sabitiyle oluşturulur.
- ResourceBundle doğru dosyayı nasıl seçer?
Java önce tam eşleşen dosyayı arar (fr_FR), yoksa dil kodunu (fr), o da yoksa varsayılan dosyayı yükler.
- i18n tarih ve para birimlerini de etkiler mi?
Evet. DateFormat ve NumberFormat sınıfları Locale parametresi alarak biçimlendirmeyi otomatik ayarlar.
- “i18n” kısaltması ne anlama gelir?
“Internationalization” kelimesinde “i” ve “n” arasında 18 harf bulunduğu için bu şekilde kısaltılır.
- UTF-8 desteği nasıl sağlanır?
Java 9 ve sonrasında .properties dosyaları varsayılan olarak UTF-8 desteklidir. Eski sürümlerde native2ascii aracı kullanılabilir.
🧩 Sonuç
Java i18n, uygulamalarınızı küresel kullanıcılar için hazır hale getirir. ResourceBundle ve Locale sınıfları sayesinde, sadece birkaç dosya ekleyerek çok dilli destek oluşturabilirsiniz.
🌍 Uygulamalarınıza çok dilli deneyimi kazandırın — Rabisu Bulut üzerinde Java projelerinizi test ederek global pazara açılın!