[DEV] translate interface independent
This commit is contained in:
parent
82bef40c20
commit
d4c651047d
@ -1,2 +1,2 @@
|
||||
# etalsnart
|
||||
# etranslate
|
||||
[APACHE v2.0] runtime translation tool
|
||||
|
1
authors.txt
Normal file
1
authors.txt
Normal file
@ -0,0 +1 @@
|
||||
MR Edouard DUPIN <yui.heero@gmail.com>
|
39
doxy_etranslate.py
Normal file
39
doxy_etranslate.py
Normal file
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/python
|
||||
import os
|
||||
import doxy.module as module
|
||||
import doxy.debug as debug
|
||||
import doxy.tools as tools
|
||||
|
||||
def create(target, module_name):
|
||||
my_module = module.Module(__file__, module_name)
|
||||
my_module.set_version("version.txt")
|
||||
my_module.set_title("E-translate: Ewol runtime translate tool")
|
||||
my_module.set_website("http://atria-soft.github.io/" + module_name)
|
||||
my_module.set_website_sources("http://github.com/atria-soft/" + module_name)
|
||||
"""
|
||||
my_module.add_path([
|
||||
module_name,
|
||||
"doc"
|
||||
])
|
||||
my_module.add_sample_path([
|
||||
"sample"
|
||||
])
|
||||
"""
|
||||
my_module.add_depend([
|
||||
'elog',
|
||||
'etk',
|
||||
'ejson',
|
||||
])
|
||||
my_module.add_exclude_symbols([
|
||||
'*operator<<*',
|
||||
])
|
||||
my_module.add_exclude_file([
|
||||
'debug.hpp',
|
||||
])
|
||||
my_module.add_file_patterns([
|
||||
'*.hpp',
|
||||
'*.md',
|
||||
'*.py',
|
||||
])
|
||||
return my_module
|
||||
|
12
etranslate/debug.cpp
Normal file
12
etranslate/debug.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <etranslate/debug.hpp>
|
||||
|
||||
int32_t etranslate::getLogId() {
|
||||
static int32_t g_val = elog::registerInstance("etranslate");
|
||||
return g_val;
|
||||
}
|
38
etranslate/debug.hpp
Normal file
38
etranslate/debug.hpp
Normal file
@ -0,0 +1,38 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <elog/log.hpp>
|
||||
|
||||
namespace etranslate {
|
||||
int32_t getLogId();
|
||||
};
|
||||
#define ETRANSLATE_BASE(info,data) ELOG_BASE(etranslate::getLogId(),info,data)
|
||||
|
||||
#define ETRANSLATE_PRINT(data) ETRANSLATE_BASE(-1, data)
|
||||
#define ETRANSLATE_CRITICAL(data) ETRANSLATE_BASE(1, data)
|
||||
#define ETRANSLATE_ERROR(data) ETRANSLATE_BASE(2, data)
|
||||
#define ETRANSLATE_WARNING(data) ETRANSLATE_BASE(3, data)
|
||||
#ifdef DEBUG
|
||||
#define ETRANSLATE_INFO(data) ETRANSLATE_BASE(4, data)
|
||||
#define ETRANSLATE_DEBUG(data) ETRANSLATE_BASE(5, data)
|
||||
#define ETRANSLATE_VERBOSE(data) ETRANSLATE_BASE(6, data)
|
||||
#define ETRANSLATE_TODO(data) ETRANSLATE_BASE(4, "TODO : " << data)
|
||||
#else
|
||||
#define ETRANSLATE_INFO(data) do { } while(false)
|
||||
#define ETRANSLATE_DEBUG(data) do { } while(false)
|
||||
#define ETRANSLATE_VERBOSE(data) do { } while(false)
|
||||
#define ETRANSLATE_TODO(data) do { } while(false)
|
||||
#endif
|
||||
|
||||
#define ETRANSLATE_ASSERT(cond,data) \
|
||||
do { \
|
||||
if (!(cond)) { \
|
||||
ETRANSLATE_CRITICAL(data); \
|
||||
assert(!#cond); \
|
||||
} \
|
||||
} while (0)
|
||||
|
@ -4,8 +4,8 @@
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <ewol/debug.hpp>
|
||||
#include <ewol/translate.hpp>
|
||||
#include <etranslate/debug.hpp>
|
||||
#include <etranslate/etranslate.hpp>
|
||||
#include <map>
|
||||
#include <etk/os/FSNode.hpp>
|
||||
#include <ejson/ejson.hpp>
|
||||
@ -20,7 +20,7 @@ class LocalInstanceTranslation {
|
||||
std::map<std::string,std::string> m_translate;
|
||||
public:
|
||||
LocalInstanceTranslation() :
|
||||
m_major("ewol"),
|
||||
m_major("etranslate"),
|
||||
m_languageDefault("EN"),
|
||||
m_language(""),
|
||||
m_translateLoadad(false) {
|
||||
@ -36,7 +36,7 @@ class LocalInstanceTranslation {
|
||||
}
|
||||
if (_major == true) {
|
||||
m_major = _lib;
|
||||
EWOL_INFO("Change major translation : '" << m_major << "'");
|
||||
ETRANSLATE_INFO("Change major translation : '" << m_major << "'");
|
||||
}
|
||||
m_translateLoadad = false;
|
||||
m_translate.clear();
|
||||
@ -55,7 +55,7 @@ class LocalInstanceTranslation {
|
||||
if (m_languageDefault == _lang) {
|
||||
return;
|
||||
}
|
||||
EWOL_INFO("Change default language translation : '" << _lang << "'");
|
||||
ETRANSLATE_INFO("Change default language translation : '" << _lang << "'");
|
||||
m_languageDefault = _lang;
|
||||
m_translateLoadad = false;
|
||||
m_translate.clear();
|
||||
@ -73,27 +73,27 @@ class LocalInstanceTranslation {
|
||||
m_translateLoadad = false;
|
||||
m_translate.clear();
|
||||
if (_lang == "EN") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=English");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=English");
|
||||
} else if (_lang == "FR") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=French");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=French");
|
||||
} else if (_lang == "DE") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=German");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=German");
|
||||
} else if (_lang == "SP") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Spanish");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Spanish");
|
||||
} else if (_lang == "JA") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Japanese");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Japanese");
|
||||
} else if (_lang == "IT") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Italian");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Italian");
|
||||
} else if (_lang == "KO") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Korean");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Korean");
|
||||
} else if (_lang == "RU") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Russian");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Russian");
|
||||
} else if (_lang == "PT") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Portuguese, Brazilian");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Portuguese, Brazilian");
|
||||
} else if (_lang == "ZH") {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Chinese");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Chinese");
|
||||
} else {
|
||||
EWOL_INFO("Change language translation: '" << _lang << "'=Unknow");
|
||||
ETRANSLATE_INFO("Change language translation: '" << _lang << "'=Unknow");
|
||||
}
|
||||
};
|
||||
|
||||
@ -103,7 +103,7 @@ class LocalInstanceTranslation {
|
||||
|
||||
std::string get(const std::string& _instance) {
|
||||
loadTranslation();
|
||||
EWOL_VERBOSE("Request translate: '" << _instance << "'");
|
||||
ETRANSLATE_VERBOSE("Request translate: '" << _instance << "'");
|
||||
// find all iterance of '_T{' ... '}'
|
||||
std::string out;
|
||||
auto itOld = _instance.begin();
|
||||
@ -114,7 +114,7 @@ class LocalInstanceTranslation {
|
||||
itOld = it;
|
||||
pos = _instance.find("}", pos);
|
||||
if (pos == std::string::npos) {
|
||||
EWOL_WARNING("missing end translation '}' in: '" << _instance << "'");
|
||||
ETRANSLATE_WARNING("missing end translation '}' in: '" << _instance << "'");
|
||||
it = _instance.end();
|
||||
} else {
|
||||
it = _instance.begin() + pos;
|
||||
@ -122,7 +122,7 @@ class LocalInstanceTranslation {
|
||||
std::string basicEmptyValue = std::string(itOld, it);
|
||||
auto itTranslate = m_translate.find(basicEmptyValue);
|
||||
if (itTranslate == m_translate.end()) {
|
||||
EWOL_DEBUG("Can not find tranlation : '" << _instance << "'");
|
||||
ETRANSLATE_DEBUG("Can not find tranlation : '" << _instance << "'");
|
||||
out += basicEmptyValue;
|
||||
} else {
|
||||
out += itTranslate->second;
|
||||
@ -137,7 +137,7 @@ class LocalInstanceTranslation {
|
||||
if (itOld != _instance.end()) {
|
||||
out.append(itOld, _instance.end());
|
||||
}
|
||||
EWOL_VERBOSE(" translation: '" << out << "'");
|
||||
ETRANSLATE_VERBOSE(" translation: '" << out << "'");
|
||||
return out;
|
||||
};
|
||||
private:
|
||||
@ -145,7 +145,7 @@ class LocalInstanceTranslation {
|
||||
if (m_translateLoadad == true) {
|
||||
return;
|
||||
}
|
||||
EWOL_VERBOSE("Load Translation MAJOR='" << m_major << "' LANG='" << m_language << "' default=" << m_languageDefault );
|
||||
ETRANSLATE_VERBOSE("Load Translation MAJOR='" << m_major << "' LANG='" << m_language << "' default=" << m_languageDefault );
|
||||
// start parse language for Major:
|
||||
auto itMajor = m_listPath.find(m_major);
|
||||
if (itMajor != m_listPath.end()) {
|
||||
@ -212,33 +212,87 @@ static LocalInstanceTranslation& getInstanceTranslation() {
|
||||
static LocalInstanceTranslation g_val;
|
||||
return g_val;
|
||||
}
|
||||
static int32_t g_isInit = 0;
|
||||
|
||||
void ewol::translate::addPath(const std::string& _lib, const std::string& _path, bool _major) {
|
||||
void etranslate::init(int _argc, const char** _argv) {
|
||||
if (g_isInit > 0) {
|
||||
g_isInit++;
|
||||
return;
|
||||
}
|
||||
ETRANSLATE_INFO("E-translate system init");
|
||||
for (int32_t iii=0; iii<_argc ; ++iii) {
|
||||
std::string data = _argv[iii];
|
||||
if ( data == "-h"
|
||||
|| data == "--help") {
|
||||
ETRANSLATE_PRINT("e-translate - help : ");
|
||||
ETRANSLATE_PRINT(" -h/--help: Dispplay this help");
|
||||
} else if (etk::start_with(data, "--etranslate") == true) {
|
||||
ETRANSLATE_ERROR("Can not parse the argument : '" << data << "'");
|
||||
}
|
||||
}
|
||||
g_isInit++;
|
||||
}
|
||||
|
||||
void etranslate::unInit() {
|
||||
if (g_isInit >= 1) {
|
||||
g_isInit--;
|
||||
return;
|
||||
}
|
||||
if (g_isInit == 1) {
|
||||
ETRANSLATE_INFO("E-translate system un-init");
|
||||
g_isInit--;
|
||||
return;
|
||||
}
|
||||
ETRANSLATE_ERROR("E-translate system un-init (already done before)");
|
||||
}
|
||||
|
||||
void etranslate::addPath(const std::string& _lib, const std::string& _path, bool _major) {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
getInstanceTranslation().addPath(_lib, _path, _major);
|
||||
}
|
||||
|
||||
const std::string& ewol::translate::getPaths(const std::string& _lib) {
|
||||
const std::string& etranslate::getPaths(const std::string& _lib) {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
return getInstanceTranslation().getPaths(_lib);
|
||||
}
|
||||
|
||||
void ewol::translate::setLanguageDefault(const std::string& _lang) {
|
||||
void etranslate::setLanguageDefault(const std::string& _lang) {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
getInstanceTranslation().setLanguageDefault(_lang);
|
||||
}
|
||||
|
||||
const std::string& ewol::translate::getLanguageDefault() {
|
||||
const std::string& etranslate::getLanguageDefault() {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
return getInstanceTranslation().getLanguageDefault();
|
||||
}
|
||||
|
||||
void ewol::translate::setLanguage(const std::string& _lang) {
|
||||
void etranslate::setLanguage(const std::string& _lang) {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
getInstanceTranslation().setLanguage(_lang);
|
||||
}
|
||||
|
||||
const std::string& ewol::translate::getLanguage() {
|
||||
const std::string& etranslate::getLanguage() {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
return getInstanceTranslation().getLanguage();
|
||||
}
|
||||
|
||||
void ewol::translate::autoDetectLanguage() {
|
||||
EWOL_VERBOSE("Auto-detect language of system");
|
||||
void etranslate::autoDetectLanguage() {
|
||||
if (g_isInit <= 0) {
|
||||
ETRANSLATE_ERROR("E-translate system has not been init");
|
||||
}
|
||||
ETRANSLATE_VERBOSE("Auto-detect language of system");
|
||||
std::string nonameLocalName;
|
||||
std::string userLocalName;
|
||||
std::string globalLocalName;
|
||||
@ -246,11 +300,11 @@ void ewol::translate::autoDetectLanguage() {
|
||||
nonameLocalName = std::locale(std::locale(), new std::ctype<char>).name();
|
||||
userLocalName = std::locale("").name();
|
||||
globalLocalName = std::locale().name();
|
||||
EWOL_VERBOSE(" The default locale is '" << globalLocalName << "'");
|
||||
EWOL_VERBOSE(" The user's locale is '" << userLocalName << "'");
|
||||
EWOL_VERBOSE(" A nameless locale is '" << nonameLocalName << "'");
|
||||
ETRANSLATE_VERBOSE(" The default locale is '" << globalLocalName << "'");
|
||||
ETRANSLATE_VERBOSE(" The user's locale is '" << userLocalName << "'");
|
||||
ETRANSLATE_VERBOSE(" A nameless locale is '" << nonameLocalName << "'");
|
||||
} catch (std::runtime_error e) {
|
||||
EWOL_ERROR("Can not get Locals ==> set English ...");
|
||||
ETRANSLATE_ERROR("Can not get Locals ==> set English ...");
|
||||
nonameLocalName = "EN";
|
||||
userLocalName = "EN";
|
||||
globalLocalName = "EN";
|
||||
@ -271,14 +325,14 @@ void ewol::translate::autoDetectLanguage() {
|
||||
}
|
||||
lang = std::string(lang.begin(), lang.begin()+2);
|
||||
lang = etk::toupper(lang);
|
||||
EWOL_INFO("Select Language : '" << lang << "'");
|
||||
ETRANSLATE_INFO("Select Language : '" << lang << "'");
|
||||
getInstanceTranslation().setLanguage(lang);
|
||||
return;
|
||||
// dead code ...
|
||||
#if defined(__TARGET_OS__Linux)
|
||||
char *s = getenv("LANG");
|
||||
if (s == nullptr || strlen(s) < 2) {
|
||||
EWOL_INFO("Try to determine system language FAIL ...");
|
||||
ETRANSLATE_INFO("Try to determine system language FAIL ...");
|
||||
} else {
|
||||
std::string lang;
|
||||
lang += s[0];
|
||||
@ -287,12 +341,12 @@ void ewol::translate::autoDetectLanguage() {
|
||||
getInstanceTranslation().setLanguage(lang);
|
||||
}
|
||||
#else
|
||||
EWOL_INFO("Can not auto-detect language ...");
|
||||
ETRANSLATE_INFO("Can not auto-detect language ...");
|
||||
getInstanceTranslation().setLanguage("EN");
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string ewol::translate::get(const std::string& _instance) {
|
||||
std::string etranslate::get(const std::string& _instance) {
|
||||
return getInstanceTranslation().get(_instance);
|
||||
}
|
||||
|
@ -22,7 +22,17 @@
|
||||
* Portuguese, Brazilian : "PT"
|
||||
* Chinese : "ZH"
|
||||
*/
|
||||
namespace etalsnart {
|
||||
namespace etranslate {
|
||||
/**
|
||||
* @brief Initialize etranslate
|
||||
* @param[in] _argc Number of argument list
|
||||
* @param[in] _argv List of arguments
|
||||
*/
|
||||
void init(int _argc, const char** _argv);
|
||||
/**
|
||||
* @brief Un-Initialize etranslate
|
||||
*/
|
||||
void unInit();
|
||||
/**
|
||||
* @brief Set the path folder of the translation files
|
||||
* @param[in] _lib Library name that the path depend
|
||||
@ -68,4 +78,4 @@ namespace etalsnart {
|
||||
std::string get(const std::string& _instance);
|
||||
};
|
||||
// Here we define a simple macro to Translate all string simply:
|
||||
#define TRANSLATE(a) etalsnart::get(a)
|
||||
#define TRANSLATE(a) etranslate::get(a)
|
49
lutin_etranslate.py
Normal file
49
lutin_etranslate.py
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/python
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
def get_type():
|
||||
return "LIBRARY"
|
||||
|
||||
def get_desc():
|
||||
return "E-translate: Ewol runtime translate tool"
|
||||
|
||||
def get_licence():
|
||||
return "APACHE-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
||||
def get_compagny_name():
|
||||
return "atria-soft"
|
||||
|
||||
def get_maintainer():
|
||||
return "authors.txt"
|
||||
|
||||
def get_version():
|
||||
return "version.txt"
|
||||
|
||||
def configure(target, my_module):
|
||||
# add extra compilation flags:
|
||||
my_module.add_extra_flags()
|
||||
# add the file to compile:
|
||||
my_module.add_src_file([
|
||||
'etranslate/etranslate.cpp',
|
||||
'etranslate/debug.cpp',
|
||||
])
|
||||
my_module.add_header_file([
|
||||
'etranslate/etranslate.hpp',
|
||||
])
|
||||
|
||||
# name of the dependency
|
||||
my_module.add_depend([
|
||||
'elog',
|
||||
'etk',
|
||||
'ejson',
|
||||
])
|
||||
|
||||
my_module.add_path(".")
|
||||
|
||||
return True
|
||||
|
1
version.txt
Normal file
1
version.txt
Normal file
@ -0,0 +1 @@
|
||||
0.1-dev
|
Loading…
x
Reference in New Issue
Block a user