2016-05-15 35 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不变。对于那些不匹配的,它将其设置为“未设置”。