C# Winform Dil Desteği

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek
    cybermole bunu yazdı

    tr.txt içerisine ;

    Save=Kaydet
    Delete=Sil
    Customers=Müşteriler

    de.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

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cybermole
    cybermole's avatar
    Kayıt Tarihi: 29/Mart/2016
    Erkek
    Asayisci bunu yazdı
    cybermole bunu yazdı

    tr.txt içerisine ;

    Save=Kaydet
    Delete=Sil
    Customers=Müşteriler

    de.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

    formdaki 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);
    }

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek
    cybermole bunu yazdı
    Asayisci bunu yazdı
    cybermole bunu yazdı

    tr.txt içerisine ;

    Save=Kaydet
    Delete=Sil
    Customers=Müşteriler

    de.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

    formdaki 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..

Toplam Hit: 2859 Toplam Mesaj: 14
dil değiştirme