[NEW_FEATURE] Add localization option -LlangCode where langCode is browser language code.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1084 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2013-07-25 17:41:25 +00:00
parent 31b15392a5
commit 1a534cd927
3 changed files with 179 additions and 14 deletions

View File

@ -987,19 +987,30 @@ bool NppParameters::load()
// In case of absence of user's nativeLang.xml, //
// We'll look in the Notepad++ Dir. //
//----------------------------------------------//
generic_string nativeLangPath(_userPath);
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
// LocalizationSwitcher should use always user path
#ifdef UNICODE
_localizationSwitcher._nativeLangPath = nativeLangPath;
#endif
if (!PathFileExists(nativeLangPath.c_str()))
generic_string nativeLangPath;
if (_startWithLocFileName != TEXT("")) // localization argument detected, use user wished localization
{
nativeLangPath = _nppPath;
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
PathAppend(nativeLangPath, TEXT("localization\\"));
PathAppend(nativeLangPath, _startWithLocFileName);
}
else // use %appdata% location, or (if absence then) npp installed location
{
nativeLangPath = _userPath;
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
// LocalizationSwitcher should use always user path
_localizationSwitcher._nativeLangPath = nativeLangPath;
if (!PathFileExists(nativeLangPath.c_str()))
{
nativeLangPath = _nppPath;
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
}
}
_pXmlNativeLangDocA = new TiXmlDocumentA();
@ -3008,6 +3019,138 @@ LangType NppParameters::getLangIDFromStr(const TCHAR *langName)
return L_TEXT;
}
generic_string NppParameters::getLocPathFromStr(const generic_string & localizationCode)
{
if (localizationCode == TEXT("af"))
return TEXT("afrikaans.xml");
if (localizationCode == TEXT("sq"))
return TEXT("albanian.xml");
if (localizationCode == TEXT("ar") || localizationCode == TEXT("ar-dz") || localizationCode == TEXT("ar-bh") || localizationCode == TEXT("ar-eg") ||localizationCode == TEXT("ar-iq") || localizationCode == TEXT("ar-jo") || localizationCode == TEXT("ar-kw") || localizationCode == TEXT("ar-lb") || localizationCode == TEXT("ar-ly") || localizationCode == TEXT("ar-ma") || localizationCode == TEXT("ar-om") || localizationCode == TEXT("ar-qa") || localizationCode == TEXT("ar-sa") || localizationCode == TEXT("ar-sy") || localizationCode == TEXT("ar-tn") || localizationCode == TEXT("ar-ae") || localizationCode == TEXT("ar-ye"))
return TEXT("arabic.xml");
if (localizationCode == TEXT("an"))
return TEXT("aragonese.xml");
if (localizationCode == TEXT("az"))
return TEXT("azerbaijani.xml");
if (localizationCode == TEXT("eu"))
return TEXT("basque.xml");
if (localizationCode == TEXT("be"))
return TEXT("belarusian.xml");
if (localizationCode == TEXT("bn"))
return TEXT("bengali.xml");
if (localizationCode == TEXT("bs"))
return TEXT("bosnian.xml");
if (localizationCode == TEXT("pt-br"))
return TEXT("brazilian_portuguese.xml");
if (localizationCode == TEXT("bg"))
return TEXT("bulgarian.xml");
if (localizationCode == TEXT("ca"))
return TEXT("catalan.xml");
if (localizationCode == TEXT("zh-tw") || localizationCode == TEXT("zh-hk") || localizationCode == TEXT("zh-sg"))
return TEXT("chinese.xml");
if (localizationCode == TEXT("zh") || localizationCode == TEXT("zh-cn"))
return TEXT("chineseSimplified.xml");
if (localizationCode == TEXT("hr"))
return TEXT("croatian.xml");
if (localizationCode == TEXT("cs"))
return TEXT("czech.xml");
if (localizationCode == TEXT("da"))
return TEXT("danish.xml");
if (localizationCode == TEXT("nl") || localizationCode == TEXT("nl-be"))
return TEXT("dutch.xml");
if (localizationCode == TEXT("eo"))
return TEXT("esperanto.xml");
if (localizationCode == TEXT("fa"))
return TEXT("farsi.xml");
if (localizationCode == TEXT("fi"))
return TEXT("finnish.xml");
if (localizationCode == TEXT("fr") || localizationCode == TEXT("fr-be") || localizationCode == TEXT("fr-ca") || localizationCode == TEXT("fr-fr") || localizationCode == TEXT("fr-lu") || localizationCode == TEXT("fr-mc") || localizationCode == TEXT("fr-ch"))
return TEXT("french.xml");
if (localizationCode == TEXT("fur"))
return TEXT("friulian.xml");
if (localizationCode == TEXT("gl"))
return TEXT("galician.xml");
if (localizationCode == TEXT("ka"))
return TEXT("georgian.xml");
if (localizationCode == TEXT("de") || localizationCode == TEXT("de-at") || localizationCode == TEXT("de-de") || localizationCode == TEXT("de-li") || localizationCode == TEXT("de-lu") || localizationCode == TEXT("de-ch"))
return TEXT("german.xml");
if (localizationCode == TEXT("el"))
return TEXT("greek.xml");
if (localizationCode == TEXT("he"))
return TEXT("hebrew.xml");
if (localizationCode == TEXT("hi"))
return TEXT("hindi.xml");
if (localizationCode == TEXT("hu"))
return TEXT("hungarian.xml");
if (localizationCode == TEXT("id"))
return TEXT("indonesian.xml");
if (localizationCode == TEXT("it") || localizationCode == TEXT("it-ch"))
return TEXT("italian.xml");
if (localizationCode == TEXT("ja"))
return TEXT("japanese.xml");
if (localizationCode == TEXT("kk"))
return TEXT("kazakh.xml");
if (localizationCode == TEXT("ko") || localizationCode == TEXT("ko-kp") || localizationCode == TEXT("ko-kr"))
return TEXT("korean.xml");
if (localizationCode == TEXT("ky"))
return TEXT("kyrgyz.xml");
if (localizationCode == TEXT("lv"))
return TEXT("latvian.xml");
if (localizationCode == TEXT("lt"))
return TEXT("lithuanian.xml");
if (localizationCode == TEXT("lb"))
return TEXT("luxembourgish.xml");
if (localizationCode == TEXT("mk"))
return TEXT("macedonian.xml");
if (localizationCode == TEXT("ms"))
return TEXT("malay.xml");
if (localizationCode == TEXT("no") || localizationCode == TEXT("nb"))
return TEXT("norwegian.xml");
if (localizationCode == TEXT("nn"))
return TEXT("nynorsk.xml");
if (localizationCode == TEXT("oc"))
return TEXT("occitan.xml");
if (localizationCode == TEXT("pl"))
return TEXT("polish.xml");
if (localizationCode == TEXT("pt"))
return TEXT("portuguese.xml");
if (localizationCode == TEXT("ro") || localizationCode == TEXT("ro-mo"))
return TEXT("romanian.xml");
if (localizationCode == TEXT("ru") || localizationCode == TEXT("ru-mo"))
return TEXT("russian.xml");
if (localizationCode == TEXT("sc"))
return TEXT("sardinian.xml");
if (localizationCode == TEXT("sr"))
return TEXT("serbian.xml");
if (localizationCode == TEXT("si"))
return TEXT("sinhala.xml");
if (localizationCode == TEXT("sk"))
return TEXT("slovak.xml");
if (localizationCode == TEXT("sl"))
return TEXT("slovenian.xml");
if (localizationCode == TEXT("es") || localizationCode == TEXT("es-bo") || localizationCode == TEXT("es-cl") || localizationCode == TEXT("es-co") || localizationCode == TEXT("es-cr") || localizationCode == TEXT("es-do") || localizationCode == TEXT("es-ec") || localizationCode == TEXT("es-sv") || localizationCode == TEXT("es-gt") || localizationCode == TEXT("es-hn") || localizationCode == TEXT("es-mx") || localizationCode == TEXT("es-ni") || localizationCode == TEXT("es-pa") || localizationCode == TEXT("es-py") || localizationCode == TEXT("es-pe") || localizationCode == TEXT("es-pr") || localizationCode == TEXT("es-es") || localizationCode == TEXT("es-uy") || localizationCode == TEXT("es-ve"))
return TEXT("spanish.xml");
if (localizationCode == TEXT("es-ar"))
return TEXT("spanish_ar.xml");
if (localizationCode == TEXT("sv"))
return TEXT("swedish.xml");
if (localizationCode == TEXT("tl"))
return TEXT("tagalog.xml");
if (localizationCode == TEXT("ta"))
return TEXT("tamil.xml");
if (localizationCode == TEXT("te"))
return TEXT("telugu.xml");
if (localizationCode == TEXT("th"))
return TEXT("thai.xml");
if (localizationCode == TEXT("tr"))
return TEXT("turkish.xml");
if (localizationCode == TEXT("uk"))
return TEXT("ukrainian.xml");
if (localizationCode == TEXT("uz"))
return TEXT("uzbek.xml");
return TEXT("");
}
void NppParameters::feedKeyWordsParameters(TiXmlNode *node)
{

View File

@ -185,8 +185,9 @@ struct CmdLineParams {
bool _isSessionFile;
LangType _langType;
generic_string _localizationPath;
CmdLineParams() : _isNoPlugin(false), _isReadOnly(false), _isNoSession(false), _isNoTab(false),_showLoadingTime(false),\
_isPreLaunch(false), _line2go(-1), _column2go(-1), _langType(L_EXTERNAL), _isPointXValid(false), _isPointYValid(false)
_isPreLaunch(false), _line2go(-1), _column2go(-1), _langType(L_EXTERNAL), _isPointXValid(false), _isPointYValid(false), _localizationPath(TEXT(""))
{
_point.x = 0;
_point.y = 0;
@ -1155,6 +1156,7 @@ class NppParameters
public:
static NppParameters * getInstance() {return _pSelf;};
static LangType getLangIDFromStr(const TCHAR *langName);
static generic_string getLocPathFromStr(const generic_string & localizationCode);
bool load();
bool reloadLang();
bool reloadStylers(TCHAR *stylePath = NULL);
@ -1425,6 +1427,10 @@ public:
void setWorkingDir(const TCHAR * newPath);
void setStartWithLocFileName(generic_string locPath) {
_startWithLocFileName = locPath;
}
bool loadSession(Session & session, const TCHAR *sessionFileName);
int langTypeToCommandID(LangType lt) const;
WNDPROC getEnableThemeDlgTexture() const {return _enableThemeDialogTextureFuncAddr;};
@ -1560,9 +1566,10 @@ private:
vector<ScintillaKeyMap> _scintillaKeyCommands; //scintilla keycommands. Static size
vector<int> _scintillaModifiedKeyIndices; //modified scintilla keys. Indices static, determined by searching for commandId. Needed when saving alterations
#ifdef UNICODE
LocalizationSwitcher _localizationSwitcher;
#endif
generic_string _startWithLocFileName;
ThemeSwitcher _themeSwitcher;
//vector<generic_string> _noMenuCmdNames;

View File

@ -150,12 +150,21 @@ bool getParamVal(TCHAR c, ParamVector & params, generic_string & value) {
return false;
}
LangType getLangTypeFromParam(ParamVector & params) {
LangType getLangTypeFromParam(ParamVector & params)
{
generic_string langStr;
if (!getParamVal('l', params, langStr))
return L_EXTERNAL;
return NppParameters::getLangIDFromStr(langStr.c_str());
};
}
generic_string getLocalizationPathFromParam(ParamVector & params)
{
generic_string locStr;
if (!getParamVal('L', params, locStr))
return TEXT("");
return NppParameters::getLocPathFromStr(locStr.c_str());
}
int getNumberFromParam(char paramName, ParamVector & params, bool & isParamePresent) {
generic_string numStr;
@ -232,6 +241,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
cmdLineParams._showLoadingTime = isInList(FLAG_LOADINGTIME, params);
cmdLineParams._isSessionFile = isInList(FLAG_OPENSESSIONFILE, params);
cmdLineParams._langType = getLangTypeFromParam(params);
cmdLineParams._localizationPath = getLocalizationPathFromParam(params);
cmdLineParams._line2go = getNumberFromParam('n', params, isParamePresent);
cmdLineParams._column2go = getNumberFromParam('c', params, isParamePresent);
cmdLineParams._point.x = getNumberFromParam('x', params, cmdLineParams._isPointXValid);
@ -243,6 +253,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
}
NppParameters *pNppParameters = NppParameters::getInstance();
if (cmdLineParams._localizationPath != TEXT(""))
{
pNppParameters->setStartWithLocFileName(cmdLineParams._localizationPath);
}
pNppParameters->load();
// override the settings if notepad style is present