/*
* Copyright 2011 Robert Theis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.sfsu.cs.orange.ocr.language;
import com.v.mypersonaltrainer.R;
import android.content.Context;
import android.content.res.Resources;
import android.util.Log;
/**
* Class for handling functions relating to converting between standard language
* codes, and converting language codes to language names.
*/
public class LanguageCodeHelper {
public static final String TAG = "LanguageCodeHelper";
/**
* Private constructor to enforce noninstantiability
*/
private LanguageCodeHelper() {
throw new AssertionError();
}
/**
* Map an ISO 639-3 language code to an ISO 639-1 language code.
*
* There is one entry here for each language recognized by the OCR engine.
*
* @param languageCode
* ISO 639-3 language code
* @return ISO 639-1 language code
*/
public static String mapLanguageCode(String languageCode) {
if (languageCode.equals("ara")) { // Arabic
return "ar";
} else if (languageCode.equals("bul")) { // Bulgarian
return "bg";
} else if (languageCode.equals("cat")) { // Catalan
return "ca";
} else if (languageCode.equals("chi_sim")) { // Chinese (Simplified)
return "zh-CN";
} else if (languageCode.equals("chi_tra")) { // Chinese (Traditional)
return "zh-TW";
} else if (languageCode.equals("ces")) { // Czech
return "cs";
} else if (languageCode.equals("dan")) { // Danish
return "da";
} else if (languageCode.equals("nld")) { // Dutch
return "nl";
} else if (languageCode.equals("eng")) { // English
return "en";
} else if (languageCode.equals("fin")) { // Finnish
return "fi";
} else if (languageCode.equals("fra")) { // French
return "fr";
} else if (languageCode.equals("deu")) { // German
return "de";
} else if (languageCode.equals("ell")) { // Greek
return "el";
} else if (languageCode.equals("heb")) { // Hebrew
return "he";
} else if (languageCode.equals("hin")) { // Hindi
return "hi";
} else if (languageCode.equals("hun")) { // Hungarian
return "hu";
} else if (languageCode.equals("ind")) { // Indonesian
return "id";
} else if (languageCode.equals("ita")) { // Italian
return "it";
} else if (languageCode.equals("jpn")) { // Japanese
return "ja";
} else if (languageCode.equals("kor")) { // Korean
return "ko";
} else if (languageCode.equals("lav")) { // Latvian
return "lv";
} else if (languageCode.equals("lit")) { // Lithuanian
return "lt";
} else if (languageCode.equals("nor")) { // Norwegian
return "no";
} else if (languageCode.equals("pol")) { // Polish
return "pl";
} else if (languageCode.equals("por")) { // Portuguese
return "pt";
} else if (languageCode.equals("ron")) { // Romanian
return "ro";
} else if (languageCode.equals("rus")) { // Russian
return "ru";
} else if (languageCode.equals("srp")) { // Serbian (Latin) // TODO is google expecting Cyrillic?
return "sr";
} else if (languageCode.equals("slk")) { // Slovak
return "sk";
} else if (languageCode.equals("slv")) { // Slovenian
return "sl";
} else if (languageCode.equals("spa")) { // Spanish
return "es";
} else if (languageCode.equals("swe")) { // Swedish
return "sv";
} else if (languageCode.equals("tgl")) { // Tagalog
return "tl";
} else if (languageCode.equals("tha")) { // Thai
return "th";
} else if (languageCode.equals("tur")) { // Turkish
return "tr";
} else if (languageCode.equals("ukr")) { // Ukrainian
return "uk";
} else if (languageCode.equals("vie")) { // Vietnamese
return "vi";
} else {
return "";
}
}
/**
* Map the given ISO 639-3 language code to a name of a language, for example,
* "Spanish"
*
* @param context
* interface to calling application environment. Needed to access
* values from strings.xml.
* @param languageCode
* ISO 639-3 language code
* @return language name
*/
public static String getOcrLanguageName(Context context, String languageCode) {
Resources res = context.getResources();
String[] language6393 = res.getStringArray(R.array.iso6393);
String[] languageNames = res.getStringArray(R.array.languagenames);
int len;
// Finds the given language code in the iso6393 array, and takes the name with the same index
// from the languagenames array.
for (len = 0; len < language6393.length; len++) {
if (language6393[len].equals(languageCode)) {
Log.d(TAG, "getOcrLanguageName: " + languageCode + "->"
+ languageNames[len]);
return languageNames[len];
}
}
Log.d(TAG, "languageCode: Could not find language name for ISO 693-3: "
+ languageCode);
return languageCode;
}
/**
* Map the given ISO 639-1 language code to a name of a language, for example,
* "Spanish"
*
* @param languageCode
* ISO 639-1 language code
* @return name of the language. For example, "English"
*/
public static String getTranslationLanguageName(Context context, String languageCode) {
Resources res = context.getResources();
String[] language6391 = res.getStringArray(R.array.translationtargetiso6391_google);
String[] languageNames = res.getStringArray(R.array.translationtargetlanguagenames_google);
int len;
// Finds the given language code in the translationtargetiso6391 array, and takes the name
// with the same index from the translationtargetlanguagenames array.
for (len = 0; len < language6391.length; len++) {
if (language6391[len].equals(languageCode)) {
Log.d(TAG, "getTranslationLanguageName: " + languageCode + "->" + languageNames[len]);
return languageNames[len];
}
}
// Now look in the Microsoft Translate API list. Currently this will only be needed for
// Haitian Creole.
language6391 = res.getStringArray(R.array.translationtargetiso6391_microsoft);
languageNames = res.getStringArray(R.array.translationtargetlanguagenames_microsoft);
for (len = 0; len < language6391.length; len++) {
if (language6391[len].equals(languageCode)) {
Log.d(TAG, "languageCode: " + languageCode + "->" + languageNames[len]);
return languageNames[len];
}
}
Log.d(TAG, "getTranslationLanguageName: Could not find language name for ISO 693-1: " +
languageCode);
return "";
}
}