hxlang.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:13k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxlang.cpp,v 1.4.32.1 2004/07/09 02:06:33 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49.  
  50. #include "hxtypes.h"
  51. #include "hxlang.h"
  52. #include "hlxclib/string.h"
  53. #include "hxstrutl.h"
  54. #include "hxheap.h"
  55. #ifdef _DEBUG
  56. #undef HX_THIS_FILE
  57. static const char HX_THIS_FILE[] = __FILE__;
  58. #endif
  59. const HXLangMapping CHXLang::Languages[] =
  60. {
  61. #ifdef _WINDOWS        
  62. {"af",MAKELANGID(LANG_AFRIKAANS,SUBLANG_NEUTRAL)},
  63. {"sq",MAKELANGID(LANG_ALBANIAN,SUBLANG_NEUTRAL)},
  64. {"ar",MAKELANGID(LANG_ARABIC,SUBLANG_NEUTRAL)},
  65. {"ar-DZ",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_ALGERIA)},
  66. {"ar-BH",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_BAHRAIN)},
  67. {"ar-EG",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_EGYPT)},
  68. {"ar-JO",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_JORDAN)},
  69. {"ar-KW",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_KUWAIT)},
  70. {"ar-LB",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_LEBANON)},
  71. {"ar-MA",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_MOROCCO)},
  72. {"ar-OM",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_OMAN)},
  73. {"ar-QA",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_QATAR)},
  74. {"ar-SA",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_SAUDI_ARABIA)},
  75. {"ar-TN",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_TUNISIA)},
  76. {"ar-AE",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_UAE)},
  77. {"ar-YE",MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_YEMEN)},
  78. {"hy",MAKELANGID(LANG_ARMENIAN,SUBLANG_NEUTRAL)},
  79. {"as",MAKELANGID(LANG_ASSAMESE,SUBLANG_NEUTRAL)},
  80. {"az",MAKELANGID(LANG_AZERI,SUBLANG_AZERI_LATIN)},
  81. {"az",MAKELANGID(LANG_AZERI,SUBLANG_AZERI_CYRILLIC)},
  82. {"eu",MAKELANGID(LANG_BASQUE,SUBLANG_NEUTRAL)},
  83. {"be",MAKELANGID(LANG_BELARUSIAN,SUBLANG_NEUTRAL)},
  84. {"bn",MAKELANGID(LANG_BENGALI,SUBLANG_NEUTRAL)},
  85. {"bg",MAKELANGID(LANG_BULGARIAN,SUBLANG_NEUTRAL)},
  86. {"ca",MAKELANGID(LANG_CATALAN,SUBLANG_NEUTRAL)},
  87. {"cs",MAKELANGID(LANG_CZECH,SUBLANG_NEUTRAL)},
  88. {"da",MAKELANGID(LANG_DANISH,SUBLANG_NEUTRAL)},
  89. {"de-AT",MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_AUSTRIAN)},
  90. {"de-CH",MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_SWISS)},
  91. {"de-LI",MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_LIECHTENSTEIN)},
  92. {"de-LU",MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_LUXEMBOURG)},
  93. {"de",MAKELANGID(LANG_GERMAN,SUBLANG_NEUTRAL)},
  94. {"el",MAKELANGID(LANG_GREEK,SUBLANG_NEUTRAL)},
  95. {"en-AU",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_AUS)},
  96. {"en-BZ",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_BELIZE)},
  97. {"en-CA",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_CAN)},
  98. {"en",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_CARIBBEAN)},
  99. {"en-GB",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_UK)},
  100. {"en-IE",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_EIRE)},
  101. {"en-JM",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_JAMAICA)},
  102. {"en-NZ",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_NZ)},
  103. {"en-TT",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_TRINIDAD)},
  104. #endif /* _WINDOWS */
  105. {"en-US",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US)},
  106. #ifdef _WINDOWS        
  107. {"en-ZA",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_SOUTH_AFRICA)},
  108. {"en-PH",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_PHILIPPINES)},
  109. {"en-ZW",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_ZIMBABWE)},
  110. {"en",MAKELANGID(LANG_ENGLISH,SUBLANG_NEUTRAL)},
  111. {"fa",MAKELANGID(LANG_FARSI,SUBLANG_NEUTRAL)},
  112. {"es-AR",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_ARGENTINA)},
  113. {"es-BO",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_BOLIVIA  )},
  114. {"es-CL",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_CHILE    )},
  115. {"es-CO",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_COLOMBIA )},
  116. {"es-CR",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_COSTA_RICA)},
  117. {"es-DO",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_DOMINICAN_REPUBLIC)},
  118. {"es-EC",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_ECUADOR  )},
  119. {"es-GT",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_GUATEMALA  )},
  120. {"es-HN",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_HONDURAS )},
  121. {"es-MX",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_MEXICAN    )},
  122. {"es-NI",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_NICARAGUA)},
  123. {"es-PA",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PANAMA     )},
  124. {"es-PE",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PERU     )},
  125. {"es-PR",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PUERTO_RICO)},
  126. {"es-PY",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PARAGUAY )},
  127. {"es-SV",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_EL_SALVADOR)},
  128. {"es-UY",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_URUGUAY  )},
  129. {"es-VE",MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_VENEZUELA)},
  130. {"es",MAKELANGID(LANG_SPANISH,SUBLANG_NEUTRAL)},
  131. {"et",MAKELANGID(LANG_ESTONIAN,SUBLANG_NEUTRAL)},
  132. {"fi",MAKELANGID(LANG_FINNISH,SUBLANG_NEUTRAL)},
  133. {"fo",MAKELANGID(LANG_FAEROESE,SUBLANG_NEUTRAL)},
  134. {"fr-BE",MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_BELGIAN)},
  135. {"fr-CA",MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_CANADIAN)},
  136. {"fr-CH",MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_SWISS)},
  137. {"fr-LU",MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_LUXEMBOURG)},
  138. {"fr-MC",MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_MONACO)},
  139. {"fr",MAKELANGID(LANG_FRENCH,SUBLANG_NEUTRAL)},
  140. {"mk",MAKELANGID(LANG_MACEDONIAN,SUBLANG_NEUTRAL)},
  141. {"ka",MAKELANGID(LANG_GEORGIAN,SUBLANG_NEUTRAL)},
  142. {"gu",MAKELANGID(LANG_GUJARATI,SUBLANG_NEUTRAL)},
  143. {"he",MAKELANGID(LANG_HEBREW,SUBLANG_NEUTRAL)},
  144. {"hi",MAKELANGID(LANG_HINDI,SUBLANG_NEUTRAL)},
  145. {"hr",MAKELANGID(LANG_CROATIAN,SUBLANG_NEUTRAL)},
  146. {"hu",MAKELANGID(LANG_HUNGARIAN,SUBLANG_NEUTRAL)},
  147. {"id",MAKELANGID(LANG_INDONESIAN,SUBLANG_NEUTRAL)},
  148. {"is",MAKELANGID(LANG_ICELANDIC,SUBLANG_NEUTRAL)},
  149. {"it-CH",MAKELANGID(LANG_ITALIAN,SUBLANG_ITALIAN_SWISS)},
  150. {"it",MAKELANGID(LANG_ITALIAN,SUBLANG_NEUTRAL)},
  151. {"ja",MAKELANGID(LANG_JAPANESE,SUBLANG_NEUTRAL)},
  152. {"ko",MAKELANGID(LANG_KOREAN,SUBLANG_NEUTRAL)},
  153. {"kn",MAKELANGID(LANG_KANNADA,SUBLANG_NEUTRAL)},
  154. {"kk",MAKELANGID(LANG_KAZAK,SUBLANG_NEUTRAL)},
  155. {"lt",MAKELANGID(LANG_LITHUANIAN,SUBLANG_NEUTRAL)},
  156. {"lv",MAKELANGID(LANG_LATVIAN,SUBLANG_NEUTRAL)},
  157. {"ms",MAKELANGID(LANG_MALAY,SUBLANG_MALAY_BRUNEI_DARUSSALAM)},
  158. {"ms",MAKELANGID(LANG_MALAY,SUBLANG_MALAY_MALAYSIA)},
  159. {"ml",MAKELANGID(LANG_MALAYALAM,SUBLANG_NEUTRAL)},
  160. {"mr",MAKELANGID(LANG_MARATHI,SUBLANG_NEUTRAL)},
  161. {"ne",MAKELANGID(LANG_NEPALI,SUBLANG_NEUTRAL)},
  162. {"nl-BE",MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH_BELGIAN)},
  163. {"nl",MAKELANGID(LANG_DUTCH,SUBLANG_NEUTRAL)},
  164. {"no",MAKELANGID(LANG_NORWEGIAN,SUBLANG_NEUTRAL)},
  165. {"nb-no",MAKELANGID(LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL)},
  166. {"nn-no",MAKELANGID(LANG_NORWEGIAN,SUBLANG_NORWEGIAN_NYNORSK)},
  167. {"or",MAKELANGID(LANG_ORIYA,SUBLANG_NEUTRAL)},
  168. {"pa",MAKELANGID(LANG_PUNJABI,SUBLANG_NEUTRAL)},
  169. {"sa",MAKELANGID(LANG_SANSKRIT,SUBLANG_NEUTRAL)},
  170. {"pl",MAKELANGID(LANG_POLISH,SUBLANG_NEUTRAL)},
  171. {"pt-BR",MAKELANGID(LANG_PORTUGUESE,SUBLANG_PORTUGUESE_BRAZILIAN)},
  172. {"pt",MAKELANGID(LANG_PORTUGUESE,SUBLANG_NEUTRAL)},
  173. {"ro",MAKELANGID(LANG_ROMANIAN,SUBLANG_NEUTRAL)},
  174. {"ru",MAKELANGID(LANG_RUSSIAN,SUBLANG_NEUTRAL)},
  175. {"sk",MAKELANGID(LANG_SLOVAK,SUBLANG_NEUTRAL)},
  176. {"sl",MAKELANGID(LANG_SLOVENIAN,SUBLANG_NEUTRAL)},
  177. {"sr",MAKELANGID(LANG_SERBIAN,SUBLANG_SERBIAN_CYRILLIC)},
  178. {"sr",MAKELANGID(LANG_SERBIAN,SUBLANG_SERBO_CROATIAN_LATIN)},
  179. {"sw",MAKELANGID(LANG_SWAHILI,SUBLANG_NEUTRAL)},
  180. {"sv-FI",MAKELANGID(LANG_SWEDISH,SUBLANG_SWEDISH_FINLAND)},
  181. {"sv",MAKELANGID(LANG_SWEDISH,SUBLANG_NEUTRAL)},
  182. {"ta",MAKELANGID(LANG_TAMIL,SUBLANG_NEUTRAL)},
  183. {"tt",MAKELANGID(LANG_TATAR,SUBLANG_NEUTRAL)},
  184. {"te",MAKELANGID(LANG_TELUGU,SUBLANG_NEUTRAL)},
  185. {"th",MAKELANGID(LANG_THAI,SUBLANG_NEUTRAL)},
  186. {"tr",MAKELANGID(LANG_TURKISH,SUBLANG_NEUTRAL)},
  187. {"uk",MAKELANGID(LANG_UKRAINIAN,SUBLANG_NEUTRAL)},
  188. {"ur",MAKELANGID(LANG_URDU,SUBLANG_NEUTRAL)},
  189. {"uz",MAKELANGID(LANG_UZBEK,SUBLANG_UZBEK_CYRILLIC)},
  190. {"uz",MAKELANGID(LANG_UZBEK,SUBLANG_UZBEK_LATIN)},
  191. {"vi",MAKELANGID(LANG_VIETNAMESE,SUBLANG_NEUTRAL)},
  192. {"zh-CN",MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED)},
  193. {"zh-HK",MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_HONGKONG)},
  194. {"zh-SG",MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SINGAPORE)},
  195. {"zh-MO",MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_MACAU)},
  196. {"zh-TW",MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL)},
  197. {"zh",MAKELANGID(LANG_CHINESE,SUBLANG_NEUTRAL)}
  198. #endif /* _WINDOWS */        
  199. };
  200. /////////////////////////////////////////////////////////////////
  201. // Given a languageID (defined in olenls.h), this returns the
  202. // index of the exact language, or -1 if not found.
  203. INT16 CHXLang::FindExact(UINT16 nLangID)
  204. {
  205. INT16 nIdx=0;
  206. for (nIdx=0; nIdx<GetCount(); nIdx++ )
  207. {
  208. if (Languages[nIdx].nLangID == nLangID)
  209. break;
  210. }
  211. if (nIdx==GetCount())
  212. nIdx=-1;
  213. return(nIdx);
  214. }
  215. /////////////////////////////////////////////////////////////////
  216. // Given a languageID (defined in olenls.h), this returns the
  217. // index of the exact language, or -1 if not found.
  218. INT16 CHXLang::FindExact(const char* szISO639)
  219. {
  220. if (szISO639==NULL) return(-1);
  221. INT16 nIdx=0;
  222. for (nIdx=0; nIdx<GetCount(); nIdx++ )
  223. {
  224. if (!stricmp(Languages[nIdx].szISO639,szISO639))
  225. break;
  226. }
  227. if (nIdx==GetCount())
  228. nIdx=-1;
  229. return(nIdx);
  230. }
  231. /////////////////////////////////////////////////////////////////
  232. // Given a languageID (defined in olenls.h), this returns the
  233. // index of the closest matching language, or -1
  234. INT16 CHXLang::FindClosest(UINT16 nLangID)
  235. {
  236. INT16 nIdx = FindExact(nLangID);
  237. // didn't find exact match?
  238. if (nIdx==-1)
  239. {
  240. // On non windows system we always just return english for now. 
  241. #ifdef _WINDOWS        
  242. UINT16 nNeutral = MAKELANGID(PRIMARYLANGID(nLangID), SUBLANG_NEUTRAL);
  243. #else
  244. UINT16 nNeutral = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
  245. #endif        
  246. if (nNeutral != nLangID)
  247. {
  248. nIdx = FindExact(nLangID);
  249. }
  250. }
  251. return(nIdx);
  252. }
  253. /////////////////////////////////////////////////////////////////
  254. // Given an index from 0 to GetCount()-1 ...
  255. const char* CHXLang::GetISO639(INT16 nIndex)
  256. {
  257. if (IsValidIndex(nIndex))
  258. return(Languages[nIndex].szISO639);
  259. return(NULL);
  260. }
  261. /////////////////////////////////////////////////////////////////
  262. // Given an index from 0 to GetCount()-1 ...
  263. UINT16 CHXLang::GetLangID(INT16 nIndex)
  264. {
  265. if (IsValidIndex(nIndex))
  266. return(Languages[nIndex].nLangID);
  267. return(0);
  268. }
  269. /////////////////////////////////////////////////////////////////
  270. // Returns the # of langauges in the static database
  271. INT16 CHXLang::GetCount()
  272. {
  273. return(sizeof(Languages)/sizeof(HXLangMapping));
  274. }