2016-05-15 17 views
2

Ich habe über das Internet nach der Antwort gesucht, aber ich kann nicht eine vollständige Liste aller verfügbaren Sprachen für meine App mit ihrer genauen Anzeige finden Name. (Ich finde viele Listen, aber keiner von ihnen scheint mit den Sprachzeichenfolgen übereinzustimmen, die ich habe. Lesen Sie weiter.) Der nächste, den ich gefunden habe, ist this one,, ist aber nicht vollständig.Liste aller verfügbaren Sprachen für Windows .NET Framework

Ich kodiere ein Plugin in C#, wo der Text von SDL Trados Studio nach Word exportiert wird und die Sprache in Word entsprechend eingestellt wird.

Ich muss eine benutzerdefinierte Methode schreiben, die diese Sprachnamen auf ihre entsprechenden Word.Language entspricht. Dies liegt daran, dass Trados (unter Verwendung der Windows-Kulturen und des .NET-Frameworks 4.5) andere Sprachnamen (Gebietsschemas) als die Namen Word.Language hat.

Während ungarischen ist die gleiche, TraditionalChinese (Word.Language) ist Chinesisch (Taiwan) in Trados.

Ich habe eine umfassende Liste für Word.Languages bereits:

public static class LanguageList 
{ 
    public static readonly HashSet<LanguageItem> _languageList = new HashSet<LanguageItem>(new[] 
    { 
     new LanguageItem("Arabic (Saudi Arabia)", 1025), 
     new LanguageItem("Bulgarian", 1026), 
     new LanguageItem("Catalan", 1027), 
     new LanguageItem("Chinese (Taiwan)", 1028), 
     new LanguageItem("Czech", 1029), 
     new LanguageItem("Danish", 1030), 
     new LanguageItem("German (Germany)", 1031), 
     new LanguageItem("Greek", 1032), 
     new LanguageItem("English (U.S.)", 1033), 
     new LanguageItem("Spanish (Spain-Traditional Sort)", 1034), 
     new LanguageItem("Finnish", 1035), 
     new LanguageItem("French (France)", 1036), 
     new LanguageItem("Hebrew", 1037), 
     new LanguageItem("Hungarian", 1038), 
     new LanguageItem("Icelandic", 1039), 
     new LanguageItem("Italian (Italy)", 1040), 
     new LanguageItem("Japanese", 1041), 
     new LanguageItem("Korean", 1042), 
     new LanguageItem("Dutch (Netherlands)", 1043), 
     new LanguageItem("Norwegian (Bokmål)", 1044), 
     new LanguageItem("Polish", 1045), 
     new LanguageItem("Portuguese (Brazil)", 1046), 
     new LanguageItem("Rhaeto-Romanic", 1047), 
     new LanguageItem("Romanian (Romania)", 1048), 
     new LanguageItem("Russian (Russia)", 1049), 
     new LanguageItem("Croatian", 1050), 
     new LanguageItem("Slovak", 1051), 
     new LanguageItem("Albanian", 1052), 
     new LanguageItem("Swedish (Sweden)", 1053), 
     new LanguageItem("Thai", 1054), 
     new LanguageItem("Turkish", 1055), 
     new LanguageItem("Urdu", 1056), 
     new LanguageItem("Indonesian", 1057), 
     new LanguageItem("Ukrainian", 1058), 
     new LanguageItem("Belarusian", 1059), 
     new LanguageItem("Slovenian", 1060), 
     new LanguageItem("Estonian", 1061), 
     new LanguageItem("Latvian", 1062), 
     new LanguageItem("Lithuanian", 1063), 
     new LanguageItem("Tajik", 1064), 
     new LanguageItem("Farsi", 1065), 
     new LanguageItem("Vietnamese", 1066), 
     new LanguageItem("Armenian", 1067), 
     new LanguageItem("Azeri (Latin)", 1068), 
     new LanguageItem("Basque", 1069), 
     new LanguageItem("Sorbian", 1070), 
     new LanguageItem("FYRO Macedonian", 1071), 
     new LanguageItem("Sutu", 1072), 
     new LanguageItem("Tsonga", 1073), 
     new LanguageItem("Tswana", 1074), 
     new LanguageItem("Venda", 1075), 
     new LanguageItem("Xhosa", 1076), 
     new LanguageItem("Zulu", 1077), 
     new LanguageItem("Afrikaans", 1078), 
     new LanguageItem("Georgian", 1079), 
     new LanguageItem("Faeroese", 1080), 
     new LanguageItem("Hindi", 1081), 
     new LanguageItem("Maltese", 1082), 
     new LanguageItem("Sami (Lappish)", 1083), 
     new LanguageItem("Gaelic (Scotland)", 1084), 
     new LanguageItem("Yiddish", 1085), 
     new LanguageItem("Malay", 1086), 
     new LanguageItem("Kazakh", 1087), 
     new LanguageItem("Kyrgyz", 1088), 
     new LanguageItem("Swahili", 1089), 
     new LanguageItem("Turkmen", 1090), 
     new LanguageItem("Uzbek (Latin)", 1091), 
     new LanguageItem("Tatar", 1092), 
     new LanguageItem("Bengali", 1093), 
     new LanguageItem("Punjabi", 1094), 
     new LanguageItem("Gujarati", 1095), 
     new LanguageItem("Oriya", 1096), 
     new LanguageItem("Tamil", 1097), 
     new LanguageItem("Telugu", 1098), 
     new LanguageItem("Kannada", 1099), 
     new LanguageItem("Malayalam", 1100), 
     new LanguageItem("Assamese", 1101), 
     new LanguageItem("Marathi", 1102), 
     new LanguageItem("Sanskrit", 1103), 
     new LanguageItem("Mongolian", 1104), 
     new LanguageItem("Tibetan (PRC)", 1105), 
     new LanguageItem("Welsh", 1106), 
     new LanguageItem("Khmer", 1107), 
     new LanguageItem("Lao", 1108), 
     new LanguageItem("Burmese", 1109), 
     new LanguageItem("Galician", 1110), 
     new LanguageItem("Konkani", 1111), 
     new LanguageItem("Manipuri", 1112), 
     new LanguageItem("Sindhi (Devanagari)", 1113), 
     new LanguageItem("Syriac", 1114), 
     new LanguageItem("Sinhalese", 1115), 
     new LanguageItem("Cherokee", 1116), 
     new LanguageItem("Inuktitut", 1117), 
     new LanguageItem("Amharic", 1118), 
     new LanguageItem("Tamazight", 1119), 
     new LanguageItem("Kashmiri (Arabic)", 1120), 
     new LanguageItem("Nepali", 1121), 
     new LanguageItem("Frisian (Netherlands)", 1122), 
     new LanguageItem("Pashto", 1123), 
     new LanguageItem("Filipino", 1124), 
     new LanguageItem("Divehi", 1125), 
     new LanguageItem("Edo", 1126), 
     new LanguageItem("Fulfulde", 1127), 
     new LanguageItem("Hausa", 1128), 
     new LanguageItem("Ibibio", 1129), 
     new LanguageItem("Yoruba", 1130), 
     new LanguageItem("Quechua (Bolivia)", 1131), 
     new LanguageItem("Sepedi", 1132), 
     new LanguageItem("Bashkir (Russia)", 1133), 
     new LanguageItem("Luxembourgish (Luxembourg)", 1134), 
     new LanguageItem("Greenlandic (Greenland)", 1135), 
     new LanguageItem("Igbo", 1136), 
     new LanguageItem("Kanuri", 1137), 
     new LanguageItem("Oromo", 1138), 
     new LanguageItem("Tigrigna (Ethiopia)", 1139), 
     new LanguageItem("Guarani", 1140), 
     new LanguageItem("Hawaiian", 1141), 
     new LanguageItem("Latin", 1142), 
     new LanguageItem("Somali", 1143), 
     new LanguageItem("Yi", 1144), 
     new LanguageItem("Papiamentu", 1145), 
     new LanguageItem("Mapudungun (Chile)", 1146), 
     new LanguageItem("Mohawk (Mohawk)", 1148), 
     new LanguageItem("Breton (France)", 1150), 
     new LanguageItem("Uyghur (PRC)", 1152), 
     new LanguageItem("Maori", 1153), 
     new LanguageItem("Occitan (France)", 1154), 
     new LanguageItem("Corsican (France)", 1155), 
     new LanguageItem("Alsatian (France)", 1156), 
     new LanguageItem("Yakut (Russia)", 1157), 
     new LanguageItem("K'iche (Guatemala)", 1158), 
     new LanguageItem("Kinyarwanda (Rwanda)", 1159), 
     new LanguageItem("Wolof (Senegal)", 1160), 
     new LanguageItem("Dari (Afghanistan)", 1164), 
     new LanguageItem("Scottish Gaelic (United Kingdom)", 1169), 
     new LanguageItem("Arabic (Iraq)", 2049), 
     new LanguageItem("Chinese (PRC)", 2052), 
     new LanguageItem("German (Switzerland)", 2055), 
     new LanguageItem("English (U.K.)", 2057), 
     new LanguageItem("Spanish (Mexico)", 2058), 
     new LanguageItem("French (Belgium)", 2060), 
     new LanguageItem("Italian (Switzerland)", 2064), 
     new LanguageItem("Dutch (Belgium)", 2067), 
     new LanguageItem("Norwegian (Nynorsk)", 2068), 
     new LanguageItem("Portuguese (Portugal)", 2070), 
     new LanguageItem("Romanian (Moldova)", 2072), 
     new LanguageItem("Russian (Moldova)", 2073), 
     new LanguageItem("Serbian (Latin)", 2074), 
     new LanguageItem("Swedish (Finland)", 2077), 
     new LanguageItem("Azeri (Cyrillic)", 2092), 
     new LanguageItem("Lower Sorbian (Germany)", 2094), 
     new LanguageItem("Sami, Northern (Sweden)", 2107), 
     new LanguageItem("Gaelic (Ireland)", 2108), 
     new LanguageItem("Malay (Brunei Darussalam)", 2110), 
     new LanguageItem("Uzbek (Cyrillic)", 2115), 
     new LanguageItem("Bengali (Bangladesh)", 2117), 
     new LanguageItem("Punjabi (Pakistan)", 2118), 
     new LanguageItem("Mongolian (Mongolian)", 2128), 
     new LanguageItem("Tibetan (Bhutan)", 2129), 
     new LanguageItem("Sindhi (Arabic)", 2137), 
     new LanguageItem("Inuktitut (Latin, Canada)", 2141), 
     new LanguageItem("Tamazight (Latin)", 2143), 
     new LanguageItem("Kashmiri", 2144), 
     new LanguageItem("Nepali (India)", 2145), 
     new LanguageItem("Quechua (Ecuador)", 2155), 
     new LanguageItem("Tigrigna (Eritrea)", 2163), 
     new LanguageItem("Arabic (Egypt)", 3073), 
     new LanguageItem("Chinese (Hong Kong S.A.R.)", 3076), 
     new LanguageItem("German (Austria)", 3079), 
     new LanguageItem("English (Australia)", 3081), 
     new LanguageItem("Spanish (Spain-Modern Sort)", 3082), 
     new LanguageItem("French (Canada)", 3084), 
     new LanguageItem("Serbian (Cyrillic)", 3098), 
     new LanguageItem("Sami, Northern (Finland)", 3131), 
     new LanguageItem("Quechua (Peru)", 3179), 
     new LanguageItem("Arabic (Libya)", 4097), 
     new LanguageItem("Chinese (Singapore)", 4100), 
     new LanguageItem("German (Luxembourg)", 4103), 
     new LanguageItem("English (Canada)", 4105), 
     new LanguageItem("Spanish (Guatemala)", 4106), 
     new LanguageItem("French (Switzerland)", 4108), 
     new LanguageItem("Croatian (Latin, Bosnia and Herzegovina)", 4122), 
     new LanguageItem("Sami, Lule (Norway)", 4155), 
     new LanguageItem("Arabic (Algeria)", 5121), 
     new LanguageItem("Chinese (Macao S.A.R.)", 5124), 
     new LanguageItem("German (Liechtenstein)", 5127), 
     new LanguageItem("English (New Zealand)", 5129), 
     new LanguageItem("Spanish (Costa Rica)", 5130), 
     new LanguageItem("French (Luxembourg)", 5132), 
     new LanguageItem("Bosnian (Latin, Bosnia and Herzegovina)", 5146), 
     new LanguageItem("Sami, Lule (Sweden)", 5179), 
     new LanguageItem("Arabic (Morocco)", 6145), 
     new LanguageItem("English (Ireland)", 6153), 
     new LanguageItem("Spanish (Panama)", 6154), 
     new LanguageItem("French (Monaco)", 6156), 
     new LanguageItem("Serbian (Latin, Bosnia and Herzegovina)", 6170), 
     new LanguageItem("Sami, Southern (Norway)", 6203), 
     new LanguageItem("Arabic (Tunisia)", 7169), 
     new LanguageItem("English (South Africa)", 7177), 
     new LanguageItem("Spanish (Dominican Republic)", 7178), 
     new LanguageItem("French (West Indies)", 7180), 
     new LanguageItem("Serbian (Cyrillic, Bosnia and Herzegovina)", 7194), 
     new LanguageItem("Sami, Southern (Sweden)", 7227), 
     new LanguageItem("Arabic (Oman)", 8193), 
     new LanguageItem("English (Jamaica)", 8201), 
     new LanguageItem("Spanish (Venezuela)", 8202), 
     new LanguageItem("French (Reunion)", 8204), 
     new LanguageItem("Bosnian (Cyrillic, Bosnia and Herzegovina)", 8218), 
     new LanguageItem("Sami, Skolt (Finland)", 8251), 
     new LanguageItem("Arabic (Yemen)", 9217), 
     new LanguageItem("English (Caribbean)", 9225), 
     new LanguageItem("Spanish (Colombia)", 9226), 
     new LanguageItem("French (Congo (DRC))", 9228), 
     new LanguageItem("Serbian (Latin, Serbia)", 9242), 
     new LanguageItem("Sami, Inari (Finland)", 9275), 
     new LanguageItem("Arabic (Syria)", 10241), 
     new LanguageItem("English (Belize)", 10249), 
     new LanguageItem("Spanish (Peru)", 10250), 
     new LanguageItem("French (Senegal)", 10252), 
     new LanguageItem("Serbian (Cyrillic, Serbia)", 10266), 
     new LanguageItem("Arabic (Jordan)", 11265), 
     new LanguageItem("English (Trinidad and Tobago)", 11273), 
     new LanguageItem("Spanish (Argentina)", 11274), 
     new LanguageItem("French (Cameroon)", 11276), 
     new LanguageItem("Serbian (Latin, Montenegro)", 11290), 
     new LanguageItem("Arabic (Lebanon)", 12289), 
     new LanguageItem("English (Zimbabwe)", 12297), 
     new LanguageItem("Spanish (Ecuador)", 12298), 
     new LanguageItem("French (Cote d'Ivoire)", 12300), 
     new LanguageItem("Serbian (Cyrillic, Montenegro)", 12314), 
     new LanguageItem("Arabic (Kuwait)", 13313), 
     new LanguageItem("English (Philippines)", 13321), 
     new LanguageItem("Spanish (Chile)", 13322), 
     new LanguageItem("French (Mali)", 13324), 
     new LanguageItem("Arabic (U.A.E)", 14337), 
     new LanguageItem("English (Indonesia)", 14345), 
     new LanguageItem("Spanish (Uruguay)", 14346), 
     new LanguageItem("French (Morocco)", 14348), 
     new LanguageItem("Arabic (Bahrain)", 15361), 
     new LanguageItem("English (Hong Kong S.A.R.)", 15369), 
     new LanguageItem("Spanish (Paraguay)", 15370), 
     new LanguageItem("French (Haiti)", 15372), 
     new LanguageItem("Arabic (Qatar)", 16385), 
     new LanguageItem("English (India)", 16393), 
     new LanguageItem("Spanish (Bolivia)", 16394), 
     new LanguageItem("English (Malaysia)", 17417), 
     new LanguageItem("Spanish (El Salvador)", 17418), 
     new LanguageItem("English (Singapore)", 18441), 
     new LanguageItem("Spanish (Honduras)", 18442), 
     new LanguageItem("Spanish (Nicaragua)", 19466), 
     new LanguageItem("Spanish (Puerto Rico)", 20490), 
     new LanguageItem("Spanish (United States)", 21514), 
    }); 

    public static LanguageItem GetLanguageItem(string languageName) 
    { 
     return _languageList.SingleOrDefault(li => li.Name.Equals(languageName)); 
    } 
} 

Ich versuche, eine umfassende Liste der Schauplätze in den Windows-Kulturen verwendet zu finden. Der entscheidende Punkt ist, dass zh-TWChinese (Traditional, Taiwan) und nicht etwas anderes sein muss. Trotz umfangreicher Suche habe ich keine solche Liste gefunden.

Edit:

  1. Um zu klären, meine Frage ist, wie die, die genaue Liste in meinem Code abrufen? Ich glaube, es sollte irgendwo in den Windows-Kulturen sein, wie CultureInfo.DisplayName oder ähnlich. Irgendeine Idee?

  2. Was ist die effektivste Methode, sie dann auf die Word.LanguageID zu werfen?

Update: Siehe Antwort unten auf diese Fragen für meine Lösung gepostet. Ich würde mich über weitere Vorschläge freuen.

+1

Die Liste, nach der Sie suchen, basiert auf dem Standard ISO 693 (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes), der sich im Laufe der Zeit geändert hat und der sich wieder ändern wird, nehme ich an. Auch das ist keine Programmierfrage: Sie suchen nach einer Ressource ;-) –

+1

Schön an ISO ist, dass sie so viele Standards zur Auswahl bieten. –

+0

[Anhang F - Länder-/Regions- und Sprachcodes] (https://technet.microsoft.com/en-us/library/dd346950.aspx). – poke

Antwort

0

Diese Strings wahrscheinlich von SDL Studio eingebettete Ressourcen genommen werden, von Sdl.LanguagePlatform.Lingua.dll. Ich habe schnell versucht, dein taiwanesisches Beispiel zu finden, aber es hat nicht funktioniert. Dennoch zeigen Ihnen, wie es nicht zu tun, hier ist mein Code:

static void Main(string[] args) 
    { 
     // forced enum iteration 
     for (int n = 0; n < 6; ++n) 
     { 
      var localInfoSet = Sdl.LanguagePlatform.Lingua.Locales.LocaleInfoSet.GetLocaleInfoSet((Sdl.LanguagePlatform.Lingua.Locales.LocaleSource)n); 

      var tradLocaleInfo = localInfoSet.Where(item => item.Name.Contains("Traditional,")); 
      foreach (var item in tradLocaleInfo) 
      { 
       System.Diagnostics.Debug.WriteLine(item.Name); 
      } 
     } 
    } 

ich die vollen Namensräume in statt using sie absichtlich gelassen. Vielleicht kann Ihnen das als Ausgangspunkt für den Zugriff auf diese Listen dienen. Oder vielleicht nicht, aber es könnte einen Versuch wert sein.

+0

Danke für den Tipp. Wird diese Sammlung von der API verfügbar gemacht? Vielleicht hat das nichts zurückgegeben. Aber das könnte ein guter Weg sein, um zu schauen. – ib11

+0

Auf diese Sammlungen kann über die .NET-Schnittstelle der DLL zugegriffen werden, aber Sie können nicht auf die DLL in Studio-Plugins verweisen, wenn Sie das versuchen. Eine Textsuche zeigt Ihnen, dass die DLL die Zeichenfolge 'Chinese (Traditional, Taiwan)' enthält, aber ich habe nicht herausgefunden, wie ich durch die von SDL bereitgestellten Einstiegspunkte dorthin gelangen kann. – Jenszcz

+0

Nun, ich habe es auch versucht, glaub mir :-) Wenn du es tust, bekommst du +25 Wiederholungen von mir LOL. BTW, ein anderes Q für Sie, vielleicht können Sie mir helfen, dieses einfacher zu knacken: http://stackoverflow.com/questions/37291533/change-keyboard-layout-from-c-sharp-code-with-net-4-5 -2 – ib11

1

Die vollständige Liste aller Sprachen können von CultureInfo zurückgegeben werden:

using System.Globalization 
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures) 

foreach (CultureInfo culture in cultures) 
{ 
    Debug.WriteLine(culture.EnglishName); 
} 

Wie in diesem Beitrag: Programmatic way to get all the available languages (in satellite assemblies)

Und als covered on msdn.

Und nach umfangreicher Suche und Tests, fand ich, dass die Sprache Sammlung, die von der SDL Trados Studio verwendet wird, ist die CultureInfo.

Es wird zugegriffen durch die API als:

string strTgtLocaleId = EditorController.ActiveDocument.ActiveFile.Language.ToString(); 
string strTgtLanguage = EditorController.ActiveDocument.ActiveFile.Language.DisplayName.ToString(); 
int strTgtLanguageId = EditorController.ActiveDocument.ActiveFile.Language.CultureInfo.LCID; 

So ist die vollständige Liste eigentlich, dass ich für mein Plugin benötigen (Anerkennung @ Jenszcz Beobachtung auf den Legacy-Strings aus früheren Produkten) ist in der Tat aus aufgezählt werden die CultureInfo.

Mein Ziel war jedoch, diese Codes direkt in die Word-Version der IDs zu übersetzen. Also habe ich einen Code ausgeführt, um die beiden Listen zu vergleichen. Ich benutzte die Word.Language Aufzählung, die ich in den OP geschrieben:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Word = Microsoft.Office.Interop.Word; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Object oMissing = System.Reflection.Missing.Value; 
      Object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 

      //OBJECTS OF FALSE AND TRUE 
      Object oTrue = true; 
      Object oFalse = false; 


      //CREATING OBJECTS OF WORD AND DOCUMENT 
      Word.Application oWord = new Word.Application(); 

      var test = oWord.Application.Languages; 

      foreach (var item in System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures)) 
      { 
       if (LanguageList._languageList.SingleOrDefault(i => i.Id.Equals(item.LCID)) != null) 
       { 
        Debug.WriteLine(LanguageList._languageList.SingleOrDefault(i => i.Id.Equals(item.LCID)).Name + 
         " -- " + 
         item.EnglishName + 
         " -- " + 
         ((int)item.LCID).ToString() 
        ); 
       } 
       else if (LanguageList._languageList.SingleOrDefault(i => i.Id.Equals(item.Parent.LCID)) != null) 
       { 
        Debug.Indent(); 
        Debug.WriteLine("-------- PARENT MATCH: " + item.EnglishName + " -- " + ((int)item.Parent.LCID).ToString()); 
        Debug.Unindent(); 
       } 
       else 
       { 
        Debug.Indent(); 
        Debug.WriteLine("!!!!!!!! NO MATCH: " + item.EnglishName + " -- " + ((int)item.LCID).ToString()); 
        Debug.Unindent(); 
       } 
      } 

     } 
    } 

Und das Ergebnis war für mich sehr glücklich. Tatsächlich passte die Word.WdLanguageID alle CultureInfo.LCID Werte eins zu eins, außer für die Legacy- und exotischen Locales (die für mein Plugin nicht benötigt werden).

Daher endete ich nicht einmal die Liste der Sprachzeichenfolgen von item.EnglishName wie Chinese (Traditionell, Taiwan) zurückgegeben.

Also übersprang ich die Enumeration ganze Tuch. Der Code läuft jetzt in Millisekunden im Vergleich zu den Minuten, die er ursprünglich benötigt hat, um alle Sprachen in der Word.Languages zu durchlaufen. Ich habe den folgenden Code die Sprache, in dem Word-Dokument zu setzen:

try 
{ 
    oWord.Selection.LanguageID = (Word.WdLanguageID)strTgtLanguageId; 
} 
catch (Exception) 
{ 
    oWord.Selection.LanguageID = (Word.WdLanguageID)0; 
} 

Dies setzt alle passenden Sprachen, die LCID auf den richtigen Word.WdLanguageID konstanten Gießen. Für diejenigen, die nicht übereinstimmen, wird es auf "Nicht festgelegt" gesetzt.