| 275 | |
| 276 | |
| 277 | bool LanguageFromCode(const char* lang_code, Language *language) { |
| 278 | *language = UNKNOWN_LANGUAGE; |
| 279 | if ( lang_code == NULL ) return false; |
| 280 | |
| 281 | for ( int i = 0 ; i < kNumLanguages ; i++ ) { |
| 282 | const LanguageInfo& info = kLanguageInfoTable[i]; |
| 283 | if ((info.language_code_639_1_ && |
| 284 | !base::strcasecmp(lang_code, info.language_code_639_1_)) || |
| 285 | (info.language_code_639_2_ && |
| 286 | !base::strcasecmp(lang_code, info.language_code_639_2_)) || |
| 287 | (info.language_code_other_ && |
| 288 | !base::strcasecmp(lang_code, info.language_code_other_))) { |
| 289 | *language = static_cast<Language>(i); |
| 290 | return true; |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | // For convenience, this function can also parse the non-standard |
| 295 | // five-letter language codes "zh-cn" and "zh-tw" which are used by |
| 296 | // front-ends such as GWS to distinguish Simplified from Traditional |
| 297 | // Chinese. |
| 298 | if (!base::strcasecmp(lang_code, "zh-cn") || |
| 299 | !base::strcasecmp(lang_code, "zh_cn")) { |
| 300 | *language = CHINESE; |
| 301 | return true; |
| 302 | } |
| 303 | if (!base::strcasecmp(lang_code, "zh-tw") || |
| 304 | !base::strcasecmp(lang_code, "zh_tw")) { |
| 305 | *language = CHINESE_T; |
| 306 | return true; |
| 307 | } |
| 308 | if (!base::strcasecmp(lang_code, "sr-me") || |
| 309 | !base::strcasecmp(lang_code, "sr_me")) { |
| 310 | *language = MONTENEGRIN; |
| 311 | return true; |
| 312 | } |
| 313 | |
| 314 | // Process language-code synonyms. |
| 315 | if (!base::strcasecmp(lang_code, "he")) { |
| 316 | *language = HEBREW; // Use "iw". |
| 317 | return true; |
| 318 | } |
| 319 | if (!base::strcasecmp(lang_code, "in")) { |
| 320 | *language = INDONESIAN; // Use "id". |
| 321 | return true; |
| 322 | } |
| 323 | if (!base::strcasecmp(lang_code, "ji")) { |
| 324 | *language = YIDDISH; // Use "yi". |
| 325 | return true; |
| 326 | } |
| 327 | |
| 328 | // Process language-detection synonyms. |
| 329 | // These distinct languages cannot be differentiated by our current |
| 330 | // language-detection algorithms. |
| 331 | if (!base::strcasecmp(lang_code, "fil")) { |
| 332 | *language = TAGALOG; |
| 333 | return true; |
| 334 | } |
no test coverage detected