Localizing Sharepoint resources – transliteration to Cyrillic

Recently I tried to localize MS WSS 3.0 site collection to unsupported language – Serbian, cyrillic (Serbia). LCID of this culture is 3098. This language is almost the same as existing latin localization to Serbian (Serbia) with LCID 2074. To get cyrillic version of resource files (resx), I installed Serbian latin language pack and searched wwwroot and 12 folders for “sr-latn-cs”, and took following files: core.sr-latn-cs.resx, resources.sr-latn-cs.resx, spadmin.sr-latn-cs.resx, spcore.sr-latn-cs.resx, spsearchadmin.sr-latn-cs.resx and wss.sr-latn-cs.resx

I got Search Center and language pack for it installed, so in an environment without search center, there should be some of these files missing.

To get sr-cyrl-cs.resx versions of theese files, I made small console application which parsed through xml files and replaced latin letters with cyrillic. Character swap is simple, and to parse xml I used following code:

static void Main(string[] args)
        {
            if (args.Length == 0) args = new string[]{"source", "destination"};
            DirectoryInfo source = new DirectoryInfo(args[0]);
            foreach (FileInfo file in source.EnumerateFiles())
            {
                XmlTextReader reader = new XmlTextReader(file.OpenText());
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                reader.Close();
                FileInfo dest = file.CopyTo(Path.Combine(args[1], file.Name.Replace(SourceLang, DestLang)), true);
                XmlDocument destination = new XmlDocument();
                foreach (XmlNode node in doc.ChildNodes)
                {
                    ParseChildren(node);
                }
 
                XmlTextWriter writer = new XmlTextWriter(dest.OpenWrite(), Encoding.Unicode);
                doc.Save(writer);
                writer.Close();
            }
        }
 
        private static void ParseChildren(XmlNode sourceNode)
        {
            foreach (XmlNode node in sourceNode.ChildNodes)
            {
                switch (node.NodeType)
                {
                    case XmlNodeType.Text:
                        if (node.Name == "#text" && node.HasChildNodes == false 
                            && node.Value.Length > 0 && node.ParentNode.ParentNode.Name == "data")
                        {
                            if (!node.ParentNode.ParentNode.Attributes["name"].Value.ToUpper().Contains("accesskey".ToUpper())
                                && !node.ParentNode.ParentNode.Attributes["name"].Value.ToUpper().Contains("_AK".ToUpper()))
                            {
                                node.Value = SmartConvertToCyrillic(node.Value);
                            }
                            else
                            {
                                break;
                            }
                        }
                        break;
                    default:
                        break;
                }
                if (node.HasChildNodes)
                    ParseChildren(node);
            }
        }

Important lines here are in case XmlNodeType.Text:

Those lines discriminate nodes which are values and need to be transliterated to Cyrillic.

When new resx files have been placed back to same respective folders where their sources for transliteration were found, then new language had to be enabled in Sharepoint.

Registry key HKEY_LOCAL_MACHINESOFTWAREMicrosoftShared ToolsWeb Server Extensions12.0InstalledLanguages contains string values whose names are LCID-s of installed languages, and value is version of satellite assembly of microsoft.sharepoint.intl.resources.dll in GAC. I added new string value named “3098” with value “12.0.0.0”. I even disassembled latin version of this dll and made cyrillic but I have what it seems unsolvable problem of impossibility to build that dll in Language version other than “Language neutral”, and I believe that is the key to enable localization of administration pages and parts of UI that is not localized.

Adding 3098 registry value enabled “Serbian Cyrillic” language in “New Web Site” SharePoint page, but to get templates for Team site, Blank, etc, it is necessary to make “3098” folder in C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12TEMPLATE

I used 2074 folder as a template, and edited files in 2074/XML subfolder to get site templates in site creation wizard.

Newly created site was mostly localized – parts which are visible to users, but administrative pages are localized from satellite dll, and I did not succeed in building language specific version of dll to use it for this purpose. Also, this dll must be signed for SharePoint to use it, and to circumvent this I used delay sign, and then added exception for signature verification using gacutil.

This was very useful resource http://social.msdn.microsoft.com/Forums/en/sharepointdevelopmentprerelease/thread/023d1fb9-c415-405a-8944-c709c0cc8f01

37 thoughts on “Localizing Sharepoint resources – transliteration to Cyrillic”

  1. Pozdrav,

    Da li mogu da te zamolim da mi posaljes aplikaciju za prevod fajlova posto na osnovu koda koji si postavio nikako ne mogu to da izvedem.

    Hvala

  2. Na osnovu samo ovoga koda ne može se izvesti, jer ovdje nedostaje implementacija funkcije SmartConvertToCyrillic, koja koristi jednu bilbioteku koja nije moja, ali to se može napraviti za 10 minuta. Mogu postaviti aplikaciju ali sa praznom implementacijom ove funkcije, ako ti odgovara?

  3. Pozdrav,

    Samo da ti javim da sam se snasao i da ti ze zahvalim sto si postavio ovaj post posto mi je jako pomogao.

    Veliki pozdrav

  4. NP, stigao mi novi disk za računar pa nisam vidio postove do sad, inače bih postavio ovaj project, a ovaj smart convert je neki kod koji je vlasništvo firme, al to je presmiješno, pretvoriš obična slova u ćirilična i staviš specijalne slučajeve za lj, nj itd…

  5. izvini. meni je ova konverzija iz latinice u cirilicu jako potrebna. mozes li nekako proslediti tu aplikaciju SmartConvertToCyrillic i dati mi neko detaljnije uputstvo za njeno koriscenje i ovog vaseg koda

  6. Konverzija iz latinice u ćirilicu se ne može jednoznačno obaviti (uvijek postoje neki izuzeci kad se ne pretvara npr nj u њ), i uvijek je bolje ako je moguće raditi konverziju iz ćirilice u latinicu.
    Ukoliko ti je potreban modul koji to radi, napisao sam drugu implementaciju koja je dostupna kao nuget package za Visual Studio na http://nuget.org/List/Packages/go.transliterator/
    Pozdrav!

  7. ja sam u sharepointu 2010 instalirao language pack serbian-latin. sajt je latinicni, meni je potrebno da bude cirilicni. kako da sve to isprebacujem?

  8. Treba da u kodu poziv metode SmartConvertToCyrillic zamijeniš sa metodom iz transliterator paketa (možda neće biti perfektno ćirilizovano ali šta je tu je). Osim toga, pošto je ovo tutorial za wss 2007, trebaš obratiti pažnju na putanje, wss 2007 je verzija 12, kod 2010 je 14, pa će sve putanje biti sa 14 u folderima i u registry bazi. Nisam probao ovaj metod na 2010 tako da ne mogu reći da li je potrebno još nekih dodatnih akcija. Pokušaj prvo da dobiješ prilikom kreiranja novog sajta opciju za ćirlicu i da to radi, onda je lako pretvoriti resurse u ćirilične.

  9. ja sam malo dosadan, ali ovaj link sto si mi stavio nema nigde link za download da bih mogao da skinem paket transliterator.

  10. znaci prvo predlazes da pokusam da primenim ovaj drugi deo tutorijala, sa izmenama u registry, da bih video da li to uopste funkcionise u sharepointu 2010? ja sam gledao po netu razno razna uputstva, ali celu implementaciju novog jezika baziraju na visual studio 2010, da li se sve to moze zaobici jer ja bas ne baratam sa visual studio-om. primer je link na koji najcesce upucuju http://www.mikhaildikov.com/2007/03/sharepoint-resources-types-use-and_2163.html

  11. Druže ako ne barataš sa visual studiom onda ne znam šta radiš sa budženjem sharepointa. Uglavnom, ovaj paket se instalira kroz nuget package manager u Visual Studiu 2010, i u njemu treba da iskoristiš ovaj kod da bi napravio i pokrenuti program koji će da “ćirilizuje” resurse. Znači, ne možeš zaobići Visual Studio.

  12. “Skida” se automatski tako što u NuGet package manager u Visual Studiu ukucaš transliterator pa ga instaliraš, ili u njegovu konzolu upišeš:
    PM> Install-Package go.transliterator

  13. kad u konzolu ukucam PM> Install-Package go.transliterator ,dobijem

    Install-Package : The current environment doesn’t have a solution open.
    At line:1 char:16
    + Install-Package <<<< go.transliterator
    + CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetNoActiveSolution,NuGet.PowerShell.Commands.InstallPackageCommand

  14. izvini, jos jedno pitanje. koje resurs fajlove treba konvertovati da bi sajt koji otvore korisnici bili potpuno na serbian cyrilic, zajedno sa ribonima, web parts. kad udjem u folder resources, config\resources ili template resources postoje razno razni resources fajlovi tipa core.sr-latn-cs.resx,cms.sr-latn-cs.resx itd.

  15. Najbolje da pretražiš C: disk za *.sr-latn-cs.resx i konvertuješ sve, i napraviš odgovarajuće strukture foldera za ćirilicu. Što se tiče ribonna i administracije, u wss (2007) su resursi za lokalizaciju bili kompajlirani u satellite assembly, koji sam ja dekompajlirao, konvertovao i kompajlirao ali nisam ga mogao uspješno iskompajlirati u sr-cyrl-cs kulturu (vjerovatno je potrebno imati originalni dll za koji je on satellite), tako da te resurse nisam mogao prevesti.

  16. uspeo sam da lokalizujem sharepoint 2010 site sa serbian latin u serbian cyrilic 90%. medjutim pojavljuje mi se problem i to na pocetnoj strani pored naziva sajta koji je na cirilici stoji latinicni deo. to stoji ovako називсајта>matična strana. mozes li da mi pomognes da i ovo prevedem u cirilicni oblik. kod u mojoj master strani za ovaj deo je

  17. Nemam sad instalaciju sharepoint pri ruci, ali čini mi se da je taj string u jednom od resource fajlova. Pokušaj pretražiti C:\inetpub i C:\Program Files\Common\Microsoft Shared\Web Server Extensions\14 sa recimo notepad++ za taj string, “matična strana”. Ako ne pronađeš u resx fajlovima, u masteru je to čini mi se nešto sp breadcrumb ili sl, vidim da nisi uspio poslati kod ovdje (možda ne da wordpress html)

  18. pokusao sam i sa kodom u maticnoj strani ovako

    ali mi nista ne pokazuje u maticnoj strani sve je isto.resetovao sam iis

  19. jesam prekopao sve nema nigde. nasao sam preko developer tools pretrazivaca da se nalazi u span tagu i stilizovan,ali on od negde dolazi, e sad odakle ne znam. takodje postoji i u
    innerHTML:
    innerText:

  20. Ako nije u resoursima, onda je vjerovatno u C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\BIN\3098\FPEXT.MSG ili tako nekako ide putanja.

    Nisam siguran da ćeš uspješno moći izmijeniti taj fajl pošto je nekako binarni.

  21. ja sam isto ovo pitanje postavio i na forumu microsoft sharepoint oni kazu da treba da ubacim kod u master page i da to resava,ali izgleda da nisu u pravu. da slucajno nema to veze sa sql bazom. ja ne znam odakle vuce ovaj PlaceHolderPageTitleInTitleArea

  22. Moguće je čak i da je u FPEXT.MSG template pa da povuče u bazu, ali svako prčkanje po bazi znači gubitak podrške od M$ = nije pametno.

  23. a li se ovaj fpext.msg konfigurise sam ili se instalira? ja sam ga u bin direktorijumu nasao u folderu 3098, ali kad ga otvorim on je latinicnim pismom pisan

  24. jeste, ali ne razumem kako onda master page vuce podatke odavde, kad je on komplet u latinici,a na mojoj stranici se vide cirilicna slova

  25. Pa kad nisu braca imali vremena da urade to kako treba nego im je dio u resursima, dio u tom fpext, a dio u microsoft.sharepoint.intl.dll u GAC

  26. jos jedno pitanje i necu vise da te gnjavi, ovaj placeholder PlaceHolderPageTitleInTitleArea na master strani, iz kog svojstva master strane vuce vrednost i gde mogu naci tu vrednost. meni se ovaj problem pojavljuje samo na prvoj strani sve ove druge prikazuje cirilicnim pismom. cinimi se kao da je neki property master strane stavljen na Maticna strana i to vuce.

  27. Sjećaš se kad sam pitao Adisa i tebe kad će lokalizacija za foundation na konf. u BL? Latinica je zakasnila skoro godinu dana, a ćirilice ni nema. A kada sam ovo radio htio sam ti poslati resurse za sr-cyrl satellite za microsoft.sharepoint.intl.dll da proslijediš u Microsoft da mi iskompajliraju pošto ja nikako nisam mogao iskompajlirati kao satellite bez koda main dll. Al onda sam to riješio pomoću javascripta :)

Leave a Reply