İçindekiler
ResX Dosyaları ve Kaynak Dosya Editörleri: Eksiksiz .NET Yerelleştirme Rehberi
Bir .NET uygulamasına ikinci bir dil eklemeye çalıştıysanız, .resx dosyalarıyla karşılaşmışsınızdır. Bu dosyalar .NET yerelleştirmesinin temelini oluşturur — ve .NET Framework 1.0'dan bu yana var olmaktadır. Bu rehber, .resx dosyalarının nasıl çalıştığını, hem ASP.NET Core hem de WinForms/WPF'te yerelleştirme kurulumunun nasıl doğru yapılandırılacağını, hangi editörlerin işi kolaylaştırdığını ve alternatiflere ne zaman bakılmasının değerli olduğunu açıklar.
Özet / Temel Çıkarımlar
- Bir
.resxdosyası, .NET'in yerelleştirilmiş dizeler, görseller ve diğer verileri depolamak için kullandığı XML tabanlı bir kaynak dosyasıdır. Çalışma zamanı, geçerli iş parçacığı kültürüne göre doğru dosyayı yükler. - Uydu derleme modeli, yerel ayara özgü
.resxdosyalarını ayrı.dlldosyalarına derler; böylece ana uygulamanız her çeviriyi gömmeden yayınlanır. - Visual Studio'nun yerleşik bir
.resxeditörü vardır, ancak birkaç dili aşınca kullanımı zorlaşır. ResXManager veya Zeta Resource Editor gibi üçüncü taraf araçlar, çok dilli düzenleme deneyimini önemli ölçüde iyileştirir. .resxyerelleştirmesi, tüm varlıkların paketlenmesi gereken çevrimdışı masaüstü uygulamaları (WPF, WinForms, MAUI) için doğru varsayılan seçenektir.- Web uygulamaları için CDN tabanlı teslimat platformları,
.resxiş akışlarını tamamlayabilir veya yerini alabilir; bu sayede çeviri güncellemeleri için yeniden derleme ve yeniden dağıtım döngüleri azalır.
ResX Dosyaları Nedir?
Bir .resx dosyası, .NET'in belirli bir dil veya kültür için adlandırılmış anahtar-değer çiftlerini — genellikle dizeleri — depolamak amacıyla kullandığı bir XML kaynak dosyasıdır. Uygulamanız çalıştığında, ResourceManager sınıfı geçerli iş parçacığının CultureInfo değerine göre doğru .resx dosyasını yükler; yerel ayara özgü bir dosya yoksa varsayılan (nötr) kaynak dosyasına geri döner.
XML Yapısı
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Uygulamamıza hoş geldiniz!</value>
<comment>Ana sayfanın hero bölümünde görüntülenir</comment>
</data>
<data name="SubmitButton" xml:space="preserve">
<value>Gönder</value>
</data>
</root>
Fransızca çeviri için Strings.resx'in yanına Strings.fr.resx oluşturun. Çalışma zamanı, kültür hiyerarşisini en özelden (fr-CA) nötrale (fr) ve varsayılana (Strings.resx) doğru takip eder.
Uydu Derlemeleri
.NET derleyicisi, yerel ayara özgü .resx dosyalarını uydu derlemeleri olarak adlandırılan ayrı .dll dosyalarına derler ve bu dosyaları kültür kodu alt dizinlerine yerleştirir. Microsoft'un belgelerine göre bu yaklaşım, ekiplerin dilleri bağımsız olarak güncellemesine olanak tanır.
ResX Tabanlı Yerelleştirme Nasıl Kurulur
Adım 1: Kaynak Dosyalarını Oluşturun
Resources/ Strings.resx ← varsayılan (İngilizce) Strings.fr.resx ← Fransızca Strings.de.resx ← Almanca Strings.ja.resx ← Japonca
Adım 2: C#'ta Kaynaklara Erişin
using MyApp.Resources; string message = Strings.WelcomeMessage;
Adım 3: Kültürü Ayarlayın
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr");
ASP.NET Core'da RequestLocalizationMiddleware kullanın.
Adım 4: IStringLocalizer Kullanın
public class HomeController : Controller
{
private readonly IStringLocalizer<HomeController> _localizer;
public HomeController(IStringLocalizer<HomeController> localizer) => _localizer = localizer;
public IActionResult Index()
{
ViewData["Message"] = _localizer["WelcomeMessage"];
return View();
}
}
ASP.NET Core yerelleştirme belgelerine bakın.
Adım 5: WPF ve WinForms
<TextBlock Text="{x:Static props:Strings.WelcomeMessage}" />
En İyi Kaynak Dosya Editörleri
| Editör | Platform | Çok Dilli | Otomatik Çeviri | En Uygun Kullanım |
|---|---|---|---|---|
| Visual Studio | Windows | Hayır | Hayır | Hızlı düzenlemeler |
| ResXManager | Windows | Evet | Google Translate | .NET ekipleri |
| Zeta Resource Editor | Windows | Evet | Hayır | Küçük ekipler |
| POEditor | Web | Evet | MT | Geliştirici olmayan çevirmenler |
| Crowdin | Web | Evet | MT | Kurumsal |
| Better i18n | Web + CLI | Evet | Yapay zeka destekli | Web + .NET hibrit |
ResXManager en yaygın kullanılan araçtır — açık kaynak, yan yana düzenleme ve eksik çeviri vurgulama özellikleri sunar.
Yaygın Sorunlar
Çeviriler görünmüyor mu? Dosya adlandırmasında büyük/küçük harf duyarlılığını (Linux/macOS), uydu derleme varlığını ve AddLocalization() içindeki ResourcesPath ayarını kontrol edin.
Kültür geri dönüşü: fr-CA → fr → varsayılan. Eksik anahtarlar sessizce geri döner.
Binlerce anahtar mı? İşlevsel alana göre bölün: Strings.Common.resx, Strings.Checkout.resx vb.
Dosyaları senkronize tutmak mı? ResXManager'ın eksik çeviri görünümünü veya derleme zamanı kontrolünü kullanın.
Modern Alternatifler
JSON Tabanlı: IStringLocalizer<T>, JSON sağlayıcılarıyla çalışır. Pull request'lerde daha okunabilir, ancak güçlü tür sarmalayıcısı yoktur.
CDN Tabanlı: Better i18n, çevirileri Cloudflare'in edge ağından sunar. Yeniden dağıtım yapmadan dizeleri güncelleyin.
.resx hâlâ doğru seçim olduğunda: Çevrimdışı çalışması gereken masaüstü uygulamaları (WPF, WinForms, MAUI). Uydu derlemeleri bu model için doğru yaklaşımdır.
Sonuç
Her .NET projesi için .resx ve Visual Studio ile başlayın. 3 veya daha fazla dilde ResXManager ekleyin. Web öncelikli projeler için JSON veya CDN'i değerlendirin. Masaüstü uygulamaları için .resx kullanmaya devam edin.
Kaynaklar
Son güncelleme: Mart 2026