Napomena
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da se prijavite ili da promenite direktorijume.
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da promenite direktorijume.
Microsoft Dataverse podržava više jezika. Ako želite da vaše rešenje bude instalirano za organizacije koje uključuju različite osnovne jezike ili imaju više jezika koji su predviđeni, uzmite to u obzir prilikom planiranja vašeg rešenja. Sledeća tabela navodi taktike koje treba koristiti zajedno sa komponentama rešenja za uključivanje u rešenje koje podržava više jezika.
Taktika | Tip komponente rešenja |
---|---|
String (RESX) veb resursi | Veb-resursi |
Ugrađene etikete | Navigacija kroz aplikaciju (mapa lokacije) Trake |
Izvoz i uvoz prevoda | Atributi Grafikoni Kontrolne table Entity Relacije između entiteta Obrasci Poruke Skupovi opcija Prikazi |
Lokalizacija u nizovima osnovnog jezika | Predlošci ugovora Uloge veza Procesi (tok posla) Bezbednosne uloge Bezbednosni profili polja |
Lokalizacija nije potrebna | Koraci obrade SDK poruke Krajnje tačke usluge |
Posebna komponenta za svaki jezik | Predlošci članaka Predlošci e-pošte Predlošci za objedinjavanje pošte Izveštaji Dijalozi |
Koristite KSML veb resurse kao jezičke resurse | Sklopovi dodatnih komponenti |
Sledeći odeljci pružaju dodatne detalje za svaku taktiku.
String (RESX) veb-resursi
Sa stringom (RESX), dodati veb-resursi sa Dataverse programerima imaju robusniju opciju za kreiranje veb-resursa koji podržavaju više jezika. Još informacija String (RESX) veb-resursi.
Ugrađene nalepnice
Svaka od komponenti rešenja koja koriste ovu taktiku zahteva da u komponentu rešenja bude uključen bilo koji lokalizovani tekst.
Trake
Kada se instalira jezički paket, traka sa aplikacijama automatski prikazuje lokalizovani tekst za sav podrazumevani tekst na traci. Oznake sistema su definisane u ResourceId
vrednosti atributa koja je namenjena samo internoj upotrebi.
Kada dodate svoj tekst, trebalo bi da upotrebite <LocLabels>
element za obezbeđivanje lokalizovanog teksta za jezike koje podržavate. Još informacija: Koristite Lokalizovane nalepnice sa trakama
Mapa lokacije
Kada se instalira jezički paket, podrazumevani tekst na traci za navigaciju automatski prikazuje lokalizovani tekst.
Da biste izmenili podrazumevani tekst ili dali svoj tekst, koristite element <Titles>
.
Element Titles
treba da sadrži element <Title>
koji sadrži lokalizovani tekst za bilo koji jezik koji vaše rešenje podržava.
Ako element Title
nije dostupan za jezik kome korisnik daje prednost, prikazuje se naslov koji odgovara osnovnom jeziku organizacije.
Element <SubArea>
omogućava prenošenje korisničkih jezičnih postavki koristeći parametar userlcid
tako da sadržaj koji je cilj atributa SubArea.Url
može biti svestan korisničkih preferencija jezika i prema tome se prilagoditi.
Još informacija: Prosleđivanje parametara URL adresi pomoću mape lokacije
Izvoz i uvoz prevoda
Oznake koje se mogu lokalizovati za komponente rešenja u sledećoj tabeli mogu se izvesti za lokalizaciju.
Entiteti | Atributi | Relacije |
Globalni skupovi opcija | Poruke entiteta | Obrasci entiteta |
Prikazi entiteta (sačuvan upit) | Grafikoni | Kontrolne table |
Prevod oznaka i prikaz stringova
Prilagođavanja u aplikaciji možete obaviti samo korišćenjem osnovnog jezika. Zbog toga, kada želite da obezbedite lokalizovane oznake i niske prikaza za ta prilagođavanja, morate da izvezete tekst oznaka tako da se mogu lokalizovati za bilo koji drugi jezik koji je omogućen za organizaciju. Primenite sledeće korake:
Uverite se da organizacija za koju radite ima instalirane sve MUI pakete i jezike predviđene za jezike za koje želite da obezbedite prevode.
Kreirajte svoje rešenje i modifikujte komponente.
Kada završite sa razvojem rešenja, koristite funkciju „Izvoz prevoda“. Ovo generiše Office Ekcel tabelu (CrmTranslations.xml) koja sadrži sve oznake kojima je potreban prevod.
U unakrsnoj tabeli unesite odgovarajuće prevode.
Uvezite prevode u istu Dataverse organizaciju koristeći funkciju „Uvoz prevoda“ i objavite izmene.
Sledeći put kada se rešenje izvozi,ono nosi sve prevode koje ste uneli.
Kada se rešenje uvozi, oznake za jezike koji nisu dostupni u ciljnom sistemu se odbacuju i beleži se upozorenje.
Ako u paketu sa rešenjima nema oznaka za osnovni jezik ciljnog sistema, umesto njih se koriste oznake osnovnog jezika izvora. Na primer, ako uvezete rešenje koje sadrži oznake za engleski i francuski jezik, sa engleskim kao osnovnim jezikom, ali ciljni sistem ima japanski i francuski, sa japanskim kao osnovnim jezikom, umesto japanskih oznaka koriste se engleske oznake. Oznake osnovnih jezika ne mogu biti nedefinisane ili prazne.
Izvoz prevoda
Pre nego što izvozite prevode, prvo morate instalirati jezičke pakete i obezbediti sve jezike koje želite da lokalizujete. Prevode možete izvesti u veb-aplikaciji ili koristeći ExportTranslationRequest poruku. Više informacija potražite u članku Izvoz prilagođenog entiteta i teksta polja radi prevoda.
Prevođenje teksta
Kada otvorite datoteku CrmTranslations.xml u programu Office Excel, videćete tri radna lista navedena u sledećoj tabeli.
Radni list | Opis |
---|---|
Informacije | Prikazuje informacije o organizaciji i rešenju iz kojih su izvezene oznake i niske. |
Niske za prikaz | Prikažite niske koje predstavljaju tekst bilo koje poruke povezane sa komponentom metapodataka. Ova tabela sadrži poruke o greškama i niske koje se koriste za elemente sistemske trake. |
Lokalizovane oznake | Prikazuje sav tekst svih oznaka komponenti metapodataka. |
Ovu datoteke možete poslati ekspertu za lingvistiku, prevodilačkoj agenciji ili preduzeću koje se bavi lokalizacijom. Oni će morati da obezbede lokalizovane niske za bilo koju praznu ćeliju.
Belešku
Za prilagođene entitete postoje neke uobičajene oznake koje se dele sa sistemskim entitetima, kao što su Kreirano ili Kreirao. Budući da ste jezike već instalirali i pripremili, ako izvozite jezike za podrazumevano rešenje, možda ćete moći da uskladite neke oznake u vašim prilagođenim entitetima sa lokalizovanim tekstom za identične oznake koje koriste drugi entiteti. Ovo može smanjiti troškove lokalizacije i poboljšati ujednačenost.
Nakon što je tekst u radnim listovima lokalizovan, dodajte i CrmTranslations.xml i [Content_Types] datoteku u jednu komprimovanu .zip datoteku. Sada možete da uvezete ovu datoteku.
Ako više volite da programski radite sa datotekama koje su izvezene kao XML dokument, pogledajte temu Standardna podrška za Word, Excel i PowerPoint za informacije o šemama koje ove datoteke koriste.
Uvoz prevedenog teksta
Važno
Prevedeni tekst možete da uvezete samo u istu organizaciju iz koje je izvezen.
Nakon što izvezite prilagođeni entitet ili tekst atributa i prevedete ga, možete da uvezete prevedene niske teksta u veb-aplikaciju koristeći ImportTranslationRequest poruku. Datoteka koju uvezete mora biti komprimovana datoteka koja u svojoj osnovi sadrži sledeće datoteke: CrmTranslations.xml i [Content_Types]. Više informacija potražite u članku Uvoz prevedenog entiteta i teksta polja.
Nakon što uvezete dovršene prevode, prilagođeni tekst se pojavljuje za korisnike koji rade na jezicima na koje ste tekst preveli.
Belešku
Softver Dataverse ne može da uveze prevedeni tekst koji ima više od 500 znakova. Ako su bilo koje stavke u vašoj datoteci sa prevodom duže od 500 znakova, uvoz neće uspeti. Ako uvoz ne uspe, pregledajte red u datoteci koji je prouzrokovao neuspeh, smanjite broj znakova i pokušajte ponovo da uvezete.
Budući da je prilagođavanje podržano samo na osnovnom jeziku, u programu Dataverse možete da radite na osnovnom jeziku koji ste postavili u željenim opcijama jezika. Za proveravanje da li se prevedeni tekst prikazuje neophodno je da promenite željenu opciju jezika za Dataverse korisnički interfejs. Ako želite da obavite dodatno prilagođavanje, neophodno je da ponovo izaberete osnovni jezik.
Lokalizacija u stringovima osnovnog jezika
Neke komponente rešenja ne podržavaju više jezika. Ove komponente uključuju imena ili tekst koji mogu imati smisla samo na određenom jeziku. Ako kreirate rešenje za određeni jezik, definišite ove komponente rešenja za glavni osnovni jezik organizacije.
Ako treba da podržite više jezika, jedna taktika je da uključite lokalizaciju u niske osnovnog jezika. Na primer, ako imate ulogu povezivanja pod nazivom „Prijatelj“ i treba da podržite engleski, španski i nemački jezik, možete da koristite tekst „Friend (Amigo / Freund)“ kao ime uloge za vezu. Zbog pitanja dužine teksta postoje ograničenja u tome koliko jezika se može podržati ovom taktikom.
Neke komponente rešenja iz ove grupe vidljive su samo administratorima. Pošto se prilagođavanje sistema može obaviti samo na osnovnom jeziku organizacije, nije neophodno davati više jezičnih verzija. Komponente bezbednosnih uloga i bezbednosnog profila na terenu pripadaju ovoj grupi.
Šabloni ugovora pružaju opis vrste ugovora o uslugama. Za njih je potreban tekst za polja Ime i Skraćenica. Trebalo bi da razmotrite upotrebu imena i skraćenica koje su jedinstvene i pogodne za sve korisnike organizacije.
Uloge veze se oslanjaju na osobu koja bira opisne kategorije i imena uloge veze. Budući da mogu biti relativno kratki, preporučuje se da uključite lokalizaciju u niske osnovnog jezika.
Procesi (tokovi posla) koji su pokrenuti za događaje mogu dobro raditi sve dok ne moraju da ažuriraju zapise sa tekstom koji treba da bude lokalizovan. Moguće je koristiti sklop toka posla tako da logika koja može da se primeni na lokalizovani tekst može da koristi istu strategiju kao i sklopovi dodatnih komponenti (Koristite XML veb-resurse kao jezičke resurse).
Radni tokovi na zahtev zahtevaju ime kako bi ih ljudi mogli da izaberu. Pored toga što uključuje lokalizaciju u naziv toka rada po zahtevu, druga taktika je kreiranje više tokova posla sa lokalizovanim imenima tako da svaki poziva isti podređeni proces. Međutim, svi će korisnici videti potpunu listu tokova poslova na zahtev, a ne samo one na željenom jeziku korisničkog interfejsa.
Lokalizacija nije potrebna
Komponente rešenja za obradu korak i krajnja tačka servisa SDK ne izlažu tekst koji se može lokalizovati korisnicima. Ako je važno da ove komponente imaju imena i opise koji odgovaraju osnovnom jeziku organizacije, možete da kreirate i izvozite kompletno rešenje sa imenima i opisima na tom jeziku.
Odvojena komponenta za svaki jezik
Sledeće komponente rešenja mogu da sadrže znatnu količinu teksta koji se mora lokalizovati:
Predlošci članaka
Predlošci e-pošte
Predlošci za objedinjavanje pošte
Izveštaji
Dijalozi
Za ove vrste komponenata rešenja preporučena taktika je kreiranje zasebnih komponenti za svaki jezik. To znači da obično kreirate osnovno kompletno rešenje koje sadrži osnovne komponente rešenja, a zatim zasebno kompletno rešenje koje sadrži ove komponente rešenja za svaki jezik. Nakon što kupci instaliraju osnovno rešenje, mogu da instaliraju kompletna rešenja za jezike koje su organizovali za organizaciju.
Za razliku od stavke Procesi (tokovi posla), možete da kreirate stavku Dijalozi koja će odražavati trenutne postavke korisničkih postavki i prikazati dijaloge samo korisnicima tog jezika.
Kreiranje lokalizovanog dijaloga
Instalirajte odgovarajući jezički paket i dodajte jezik.
Za više informacija pogledajte Uputstvo za instalaciju jezičkog paketa.
Promenite lične opcije da biste odredili Jezik korisničkog interfejsa za jezik na kome želite da se prikazuje dijalog.
Idi na Postavke i u grupi Centar za procese izaberite Procesi.
Kliknite na Novo i kreirajte dijalog na jeziku koji ste naveli.
Nakon što ste kreirali dijalog, promenite svoje lične opcije da biste odredili osnovni jezik organizacije.
Dok koristite osnovni jezik organizacije, možete se kretati do oblasti Rešenja u meniju Postavke i dodajte lokalizovani dijalog kao deo rešenja.
Dijalog kreiran na drugom jeziku biće prikazan samo korisnicima koji pregledaju Dataverse koristeći taj jezik.
Koristite XML veb-resurse kao jezičke resurse
Komponente sklopa rešenja mogu da šalju poruke krajnjem korisniku bacanjem InvalidPluginExecutionException, kao i kreiranjem i ažuriranjem zapisa. Za razliku od Silverlight veb-resursa, dodatne komponente ne mogu koristiti datoteke sa resursima.
Kada dodatna komponenta zahteva lokalizovani tekst, možete da koristite XML veb-resurs za smeštanje lokalizovanih nizova kako bi dodatna komponenta mogla da im pristupi po potrebi. Struktura XML-a je vaša opcija, ali možda ćete želeti da sledite strukturu koju koriste datoteke ASP.NET resursa (.resx) za kreiranje zasebnih XML veb-resursa za svaki jezik. Na primer, sledeći je XML veb-resurs pod nazivom localizedString.en_US koji prati obrazac koji koriste . resx datoteke.
<root>
<data name="ErrorMessage">
<value>There was an error completing this action. Please try again.</value>
</data>
<data name="Welcome">
<value>Welcome</value>
</data>
</root>
Sledeći kod pokazuje kako se lokalizovana poruka može vratiti u dodatnu komponentu da bi se korisniku prikazala poruka. To je za fazu pre validacije događaja Delete
za entitet Account
:
protected void ExecutePreValidateAccountDelete(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
int OrgLanguage = RetrieveOrganizationBaseLanguageCode(localContext.OrganizationService);
int UserLanguage = RetrieveUserUILanguageCode(localContext.OrganizationService,
localContext.PluginExecutionContext.InitiatingUserId);
String fallBackResourceFile = "";
switch (OrgLanguage)
{
case 1033:
fallBackResourceFile = "new_localizedStrings.en_US";
break;
case 1041:
fallBackResourceFile = "new_localizedStrings.ja_JP";
break;
case 1031:
fallBackResourceFile = "new_localizedStrings.de_DE";
break;
case 1036:
fallBackResourceFile = "new_localizedStrings.fr_FR";
break;
case 1034:
fallBackResourceFile = "new_localizedStrings.es_ES";
break;
case 1049:
fallBackResourceFile = "new_localizedStrings.ru_RU";
break;
default:
fallBackResourceFile = "new_localizedStrings.en_US";
break;
}
String ResourceFile = "";
switch (UserLanguage)
{
case 1033:
ResourceFile = "new_localizedStrings.en_US";
break;
case 1041:
ResourceFile = "new_localizedStrings.ja_JP";
break;
case 1031:
ResourceFile = "new_localizedStrings.de_DE";
break;
case 1036:
ResourceFile = "new_localizedStrings.fr_FR";
break;
case 1034:
ResourceFile = "new_localizedStrings.es_ES";
break;
case 1049:
ResourceFile = "new_localizedStrings.ru_RU";
break;
default:
ResourceFile = fallBackResourceFile;
break;
}
XmlDocument messages = RetrieveXmlWebResourceByName(localContext, ResourceFile);
String message = RetrieveLocalizedStringFromWebResource(localContext, messages, "ErrorMessage");
throw new InvalidPluginExecutionException(message);
}
protected static int RetrieveOrganizationBaseLanguageCode(IOrganizationService service)
{
QueryExpression organizationEntityQuery = new QueryExpression("organization");
organizationEntityQuery.ColumnSet.AddColumn("languagecode");
EntityCollection organizationEntities = service.RetrieveMultiple(organizationEntityQuery);
return (int)organizationEntities[0].Attributes["languagecode"];
}
protected static int RetrieveUserUILanguageCode(IOrganizationService service, Guid userId)
{
QueryExpression userSettingsQuery = new QueryExpression("usersettings");
userSettingsQuery.ColumnSet.AddColumns("uilanguageid", "systemuserid");
userSettingsQuery.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, userId);
EntityCollection userSettings = service.RetrieveMultiple(userSettingsQuery);
if (userSettings.Entities.Count > 0)
{
return (int)userSettings.Entities[0]["uilanguageid"];
}
return 0;
}
protected static XmlDocument RetrieveXmlWebResourceByName(LocalPluginContext context, string webresourceSchemaName)
{
context.TracingService.Trace("Begin:RetrieveXmlWebResourceByName, webresourceSchemaName={0}", webresourceSchemaName);
QueryExpression webresourceQuery = new QueryExpression("webresource");
webresourceQuery.ColumnSet.AddColumn("content");
webresourceQuery.Criteria.AddCondition("name", ConditionOperator.Equal, webresourceSchemaName);
EntityCollection webresources = context.OrganizationService.RetrieveMultiple(webresourceQuery);
context.TracingService.Trace("Webresources Returned from server. Count={0}", webresources.Entities.Count);
if (webresources.Entities.Count > 0)
{
byte[] bytes = Convert.FromBase64String((string)webresources.Entities[0]["content"]);
// The bytes would contain the ByteOrderMask. Encoding.UTF8.GetString() does not remove the BOM.
// Stream Reader auto detects the BOM and removes it on the text
XmlDocument document = new XmlDocument();
document.XmlResolver = null;
using (MemoryStream ms = new MemoryStream(bytes))
{
using (StreamReader sr = new StreamReader(ms))
{
document.Load(sr);
}
}
context.TracingService.Trace("End:RetrieveXmlWebResourceByName , webresourceSchemaName={0}", webresourceSchemaName);
return document;
}
else
{
context.TracingService.Trace("{0} Webresource missing. Reinstall the solution", webresourceSchemaName);
throw new InvalidPluginExecutionException(String.Format("Unable to locate the web resource {0}.", webresourceSchemaName));
return null;
// This line never reached
}
}
protected static string RetrieveLocalizedStringFromWebResource(LocalPluginContext context, XmlDocument resource, string resourceId)
{
XmlNode valueNode = resource.SelectSingleNode(string.Format(CultureInfo.InvariantCulture, "./root/data[@name='{0}']/value", resourceId));
if (valueNode != null)
{
return valueNode.InnerText;
}
else
{
context.TracingService.Trace("No Node Found for {0} ", resourceId);
throw new InvalidPluginExecutionException(String.Format("ResourceID {0} was not found.", resourceId));
}
}