Tema: Re: .net lokalizacija [solved]
Autorius: Jornada Del Muerto
Data: 2011-01-04 02:39:07
Atbulai atsakysiu:

> ms tam ir kuria visokius pasiulymus, kad paskui pats nesinaudotu, o kitiems 
> jie butu lyg rakstis vienoje vietoje

Tas faktas, daugelis sprendimu skirtas ne kazkokios rimtos developinimo sistemos ar rimtu lib'u susikurimui, bet daugiausiai maziem projekteliam, kur kuriama kazkas nedidelio ir nevystoma ilga laika:

    1. Jeigu pastoviai vystoma i resursu faila reikia dadejineti vis nauju tekstu, o jei ju bus n kalbu, pvz. Resources.lt.resx, Resources.ru.resx, Resources.de.resx, Resources.pl.resx, Resources.resx ir t.t... tai teks rankom nauja string dadejus dadejineti kitom kalbom. Tiesa nezinau kaip lokalizuotos formos tai daro kur System.Windows.Form::Localized = true ir nurinkta kazkokia kalba, ar jos automatu dadejines ar kaip.

    2. Paciu resursu failu minusas, kad lengvai pasiekiamas tekstu dubliavimas ir bent as nezinau geru priemoniu kaip tai sutikrinti, galbut aisku galima prisikurt kruva resursu failu tipo: Errors.en.resx Errors.lt.resx ir t.t... Messages.en.resx, Messages.lt.resx ir t.t... ir t..t... bet jei ir tai suveiks tai visa kruva dll prikompiliuos .net :)


> as ieskociau budo, kaip keiciant kalba, nuskaityti klaseje kur su static 
> funkcija i globalius kintamuosius is *.resx bylu, o su get ir set paduoti 
> jau nuskaityta reiksme
> 
> nes jei realizuoti buda kur kiekviename get ir set ieskoma klases modulio, 
> jo Assembly, po to krovimai is *.resx bylos - tai jau gali tekti ieskoti 
> zveries, o ne PC
> 
> cia gal perdengimas interfeiso, su Jusu jau minetu URL padetu


Manau prioritetai rimtai lokalizacijos sistemai butu tokie:

1. Isvengti per ilga laika tekstu dubliavimosi;
2. Kad programuotojui butu kuo paprasciau prideti nauja teksta;
3. Patogus administravimas, tikrinimai, paieska, vertimas - resursu faila patogu redaguot kol jame zodziu nera labai daug;
4. Ir kad sistema dirbtu greitai.

Jei vistik pamascius apie lokalizavimo dll be resursu failu, tai turetu buti kazkas tokio:

public static class Localization {

    // atsakingas uz kalbos keitima, bei reikalingas duomenu bazes inicializacijas ir tekstu pakrovimus ir t.t...
    // tuo paciu ijungtu ir proceso kalba, kas duotu suderinamuma su standartine .net resursu lokalizacija
    public static SetLanguage (string language); 

    // funkcija per kuria gaunamas atitinkamos kalbos tekstas
    // jeigu tokio teksto nera tai grazina gauta teksta ir tuo paciu registruoja ji lokalioje duombazytej bei ideda i statini greitai pasiekiama masyva
    public static string T (string englishString);
}

Esme ta kad paduodamas tikras tekstas i T funkcija, pvz. galima kaip ir drupal by default english, naudojimas butu toks:

MessageBox.Show(Localization.T("Error happen!")); 

arba

MessageBox.Show(string.Format(
    Localization.T("Invalid path of {0} file"),
    file));

Taip pat si sistema palaikytu specialiai del propertyGrid ir DisplayNameAttribute bei DescriptionAttribute ar TypeConverters, tokius kaip boolean to localized yes/no, ar localized enum description converter (ka ir naudoju senai)  aka: 

public enum 
{
    [Localization.DisplayName("To words (money)")]
    ToWordsMoney,
    [Localization.DisplayName("To words (not money)")]
    ToWords,
    [Localization.DisplayName("None")]
    None,
}

Tuo pasiekiama kad programmeris raso paprasta angliska teksta net ir pridedant visiskai nauja teksta.

DB cia gal geriausiai kokia SQLite butu, struktura daugmaz tokia:

Languages { code, name, englishName }
Words { id, languageCode, englishWord, word)  - kur englishWord tai tas zodis kuri programeris iraso developindamas, o word vertimas

Cia gal ne visai taupiai bet uz tai maksimum paprastai, tada startuojant Localization pakraunami nustatytos kalbos zodziai is db, dar panorejus galima pridet koki nors SubType i zodziu struktura, kad pvz. i Localization dadet funkcija:

string T {string englishString, subType);

ar net pasiimineti visa dictionary:

Dictionary<string,string> LoadWords( string subType); 

kad tik to modulio naudojamus zodzius paimt i ji, na cia daug ka sugalvot galima, kad ir kur laikant keshuot manau galima rast daug budu.