2016-05-15 33 views
2

所有可用的語言我一直在尋找的答案過網,但我似乎不能夠找到所有的語言可供我的應用程序的完整列表與他們的確切顯示名稱。 (我發現很多名單,但他們都不相匹配的語言字符串我有閱讀上。)最近的一個,我發現是this one,,但不完整。列出的Windows .NET框架

我編碼在C#中的一個插件,其中文本是從SDL Trados Studio中導出到Word,而這種語言在Word中相應的設置。

我需要寫蒙上這些語言名稱及其相關Word.Language相當於一個自定義的方法。這是因爲Trados(使用Windows文化和.NET框架4.5)具有與Word.Language名稱不同的語言(語言環境)名稱。

雖然匈牙利是一樣的,TraditionalChineseWord.Language)是中國(繁體,臺灣)在TRADOS。

我有一個全面的列表Word.Languages已經:

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

我試圖找到在Windows文化所使用的語言環境的完整列表。關鍵的一點是,ZH-TW必須中國(繁體,臺灣),而不是別的東西。儘管已經進行了廣泛的搜索,但我還是無法找到這樣的列表。

編輯:

  1. 爲了澄清,我的問題是,如何檢索我的代碼的確切名單?我相信它應該在Windows文化中的某個地方,例如CultureInfo.DisplayName或類似的地方。任何想法?

  2. 什麼是最有效的方法,然後過度投他們的Word.LanguageID

更新: 請參閱回答下面貼了我的解決這些問題。仍然會感激任何其他建議。

+1

您正在查找的列表基於ISO 693標準(https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes),該標準隨着時間的推移而發生變化,而且我將再次改變。此外,這不是一個編程問題:您正在尋找資源;-) –

+1

關於ISO的好處是它們提供瞭如此多的標準供您選擇。 –

+0

[附錄F - 國家/地區和語言代碼](https://technet.microsoft.com/zh-cn/library/dd346950.aspx)。 – poke

回答

0

這些字符串可能是由SDL Studio嵌入式資源採取從Sdl.LanguagePlatform.Lingua.dll。我儘快找到你的臺灣例子,但它沒有奏效。不過,向您展示如何不這樣做,這是我的代碼:

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

我故意留下完整的命名空間中,而不是他們using。也許這可以爲您提供訪問這些列表的起點。或者不是,但可能值得一試。

+0

感謝您的提示。此集合是否由API公開?也許這是它沒有返回。但是這可能是一條很好的路徑。 – ib11

+0

這些集合可以通過dll的.NET接口訪問,但是如果這就是你想要做的,你可能不會引用Studio插件中的dll。一個文本搜索會告訴你,該DLL確實包含字符串'中國(傳統,臺灣)',但我沒有弄清楚如何通過SDL提供的入口點。 – Jenszcz

+0

好吧,我也試過,相信我:-)如果你這樣做,你會從我LOL獲得+25代表。順便說一句,另一個Q給你,也許你可以幫助我更容易地破解這一個:http://stackoverflow.com/questions/37291533/change-keyboard-layout-from-c-sharp-code-with-net-4-5 -2 – ib11

1

可以從CultureInfo返回所有語言的完整列表:

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

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

正如這篇文章:Programmatic way to get all the available languages (in satellite assemblies)

而作爲covered on msdn

經過廣泛的搜索和測試後,我發現SDL Trados Studio使用的語言集合是CultureInfo

它是通過API的訪問:

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

這樣的完整列表實際上,我需要爲我的插件(承認@ Jenszcz對早期產品的傳統串觀察)其實可以從枚舉CultureInfo

但是,我的目標是直接將這些代碼轉換爲Word版本的ID。所以我運行了一個代碼來比較兩個列表。我用Word.Language枚舉我張貼在OP:

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

     } 
    } 

而結果是我非常幸運。實際上,Word.WdLanguageID與所有CultureInfo.LCID值一一對應,除了傳統和異域語言環境(我的插件不需要)。

因此,我最終甚至不需要item.EnglishName返回的語言字符串列表,如中文(繁體,臺灣)

所以我跳過了枚舉整個布。現在,代碼與以前在Word.Languages中通過所有語言循環所用的分鐘數相比,現在以毫秒爲單位運行。我用下面的代碼來設置Word文檔的語言:

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

這臺所有匹配的語言,鑄造LCID正確Word.WdLanguageID不變。對於那些不匹配的,它將其設置爲「未設置」。