[DEV] translate interface independent

This commit is contained in:
Edouard DUPIN 2016-10-14 21:17:03 +02:00
parent 82bef40c20
commit d4c651047d
9 changed files with 244 additions and 40 deletions

View File

@ -1,2 +1,2 @@
# etalsnart
# etranslate
[APACHE v2.0] runtime translation tool

1
authors.txt Normal file
View File

@ -0,0 +1 @@
MR Edouard DUPIN <yui.heero@gmail.com>

39
doxy_etranslate.py Normal file
View 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
View 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
View 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)

View File

@ -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);
}

View File

@ -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
View 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
View File

@ -0,0 +1 @@
0.1-dev