C# Winform Dil Desteği
-
cybermole bunu yazdı
tr.txt içerisine ;
Save=Kaydet
Delete=Sil
Customers=Müşterilerde.txt içerisine;
Kaydet=Speichern
Sil=Löschen
Müşteriler=Kunden!şeklinde kaydet
private Dictionary<string, string> translations = new Dictionary<string, string>(); private void LoadTranslations(string language) { string[] lines = File.ReadAllLines($"{language}.txt"); foreach (string line in lines) { string[] parts = line.Split('='); if (parts.Length == 2) { string key = parts[0]; string value = parts[1]; translations[key] = value; } } buttonSave.Text = GetTranslation("Save"); buttonDelete.Text = GetTranslation("Delete"); labelCustomers.Text = GetTranslation("Customers"); } private string GetTranslation(string key) { if (translations.TryGetValue(key, out string translation)) { return translation; } return key; }bu şekilde txtde tutabilirsin en kolay bu gibi.
peki buttonSave.Text = GetTranslation("Save"); gibi atama operatörü kullanmak yerine
form daki nesneleri bir döngüye sokup eğer çevirileri varsa text properties lerini değiştirsek bu mümkün mü?
sanırım tam olarak istediğim bu -
Asayisci bunu yazdıcybermole bunu yazdı
tr.txt içerisine ;
Save=Kaydet
Delete=Sil
Customers=Müşterilerde.txt içerisine;
Kaydet=Speichern
Sil=Löschen
Müşteriler=Kunden!şeklinde kaydet
private Dictionary<string, string> translations = new Dictionary<string, string>(); private void LoadTranslations(string language) { string[] lines = File.ReadAllLines($"{language}.txt"); foreach (string line in lines) { string[] parts = line.Split('='); if (parts.Length == 2) { string key = parts[0]; string value = parts[1]; translations[key] = value; } } buttonSave.Text = GetTranslation("Save"); buttonDelete.Text = GetTranslation("Delete"); labelCustomers.Text = GetTranslation("Customers"); } private string GetTranslation(string key) { if (translations.TryGetValue(key, out string translation)) { return translation; } return key; }bu şekilde txtde tutabilirsin en kolay bu gibi.
peki buttonSave.Text = GetTranslation("Save"); gibi atama operatörü kullanmak yerine
form daki nesneleri bir döngüye sokup eğer çevirileri varsa text properties lerini değiştirsek bu mümkün mü?
sanırım tam olarak istediğim buformdaki tüm kontrol nesnelerini dolaşan ve çevirileri uygulayan bir işlev yapabilirsin
private void TranslateControls(Control control)
{
foreach (Control c in control.Controls)
{
if (c is Button)
{
Button button = (Button)c;
button.Text = GetTranslation(button.Text);
}
else if (c is Label)
{
Label label = (Label)c;
label.Text = GetTranslation(label.Text);
}
// Diğer kontrol türleri için de aynı işlemi yapabilirsiniz (TextBox, ComboBox, vb.).
if (c.HasChildren)
{
TranslateControls(c);
}
}
}
private void MainForm_Load(object sender, EventArgs e)
{
//yüklendiğinde çevirileri uygula
TranslateControls(this);
}
dil seçimini değiştirdiğinde yeniden yüklemek için:private void comboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
// comboiçin seçileni al
string selectedLanguage = comboBoxLanguage.SelectedItem.ToString();// dili ayarla güncelle
SetLanguage(selectedLanguage);// kontrol nesnelerini yeniden çevir
TranslateControls(this);
} -
cybermole bunu yazdıAsayisci bunu yazdıcybermole bunu yazdı
tr.txt içerisine ;
Save=Kaydet
Delete=Sil
Customers=Müşterilerde.txt içerisine;
Kaydet=Speichern
Sil=Löschen
Müşteriler=Kunden!şeklinde kaydet
private Dictionary<string, string> translations = new Dictionary<string, string>(); private void LoadTranslations(string language) { string[] lines = File.ReadAllLines($"{language}.txt"); foreach (string line in lines) { string[] parts = line.Split('='); if (parts.Length == 2) { string key = parts[0]; string value = parts[1]; translations[key] = value; } } buttonSave.Text = GetTranslation("Save"); buttonDelete.Text = GetTranslation("Delete"); labelCustomers.Text = GetTranslation("Customers"); } private string GetTranslation(string key) { if (translations.TryGetValue(key, out string translation)) { return translation; } return key; }bu şekilde txtde tutabilirsin en kolay bu gibi.
peki buttonSave.Text = GetTranslation("Save"); gibi atama operatörü kullanmak yerine
form daki nesneleri bir döngüye sokup eğer çevirileri varsa text properties lerini değiştirsek bu mümkün mü?
sanırım tam olarak istediğim buformdaki tüm kontrol nesnelerini dolaşan ve çevirileri uygulayan bir işlev yapabilirsin
private void TranslateControls(Control control)
{
foreach (Control c in control.Controls)
{
if (c is Button)
{
Button button = (Button)c;
button.Text = GetTranslation(button.Text);
}
else if (c is Label)
{
Label label = (Label)c;
label.Text = GetTranslation(label.Text);
}
// Diğer kontrol türleri için de aynı işlemi yapabilirsiniz (TextBox, ComboBox, vb.).
if (c.HasChildren)
{
TranslateControls(c);
}
}
}
private void MainForm_Load(object sender, EventArgs e)
{
//yüklendiğinde çevirileri uygula
TranslateControls(this);
}
dil seçimini değiştirdiğinde yeniden yüklemek için:private void comboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
// comboiçin seçileni al
string selectedLanguage = comboBoxLanguage.SelectedItem.ToString();// dili ayarla güncelle
SetLanguage(selectedLanguage);// kontrol nesnelerini yeniden çevir
TranslateControls(this);
}tam düşündüğüm şey buydu deniyeceğim.
Teşekkürler..
