[i18n] start multilang support for webconsole

Signed-off-by: R4SAS <r4sas@i2pmail.org>
This commit is contained in:
R4SAS 2021-05-22 08:39:05 +03:00
parent 59b471b9a2
commit 0e68fe4a57
6 changed files with 140 additions and 19 deletions

39
i18n/I18N.h Normal file
View file

@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#ifndef __I18N_H__
#define __I18N_H__
namespace i2p {
namespace i18n {
namespace russian {
std::string GetString (std::string arg);
std::string GetPlural (std::string arg, int n);
}
std::string translate (std::string arg)
{
return i2p::i18n::russian::GetString (arg);
}
template<typename inttype>
std::string translate (std::string arg, inttype&& n)
{
return i2p::i18n::russian::GetPlural (arg, (int) n);
}
} // i18n
} // i2p
template<typename... TArgs>
std::string tr (TArgs&&... args) {
return i2p::i18n::translate(std::forward<TArgs>(args)...);
}
#endif // __I18N_H__

56
i18n/russian.cpp Normal file
View file

@ -0,0 +1,56 @@
#include <map>
#include <vector>
#include <string>
// Russian localization file
namespace i2p {
namespace i18n {
namespace russian { // language
// See for language plural forms here:
// https://localization-guide.readthedocs.io/en/latest/l10n/pluralforms.html
int plural (int n) {
return n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
}
static std::map<std::string, std::string> strings
{
{"Enabled", "Включено"},
{"Disabled", "Выключено"}
};
static std::map<std::string, std::vector<std::string>> plurals
{
{"days", {"день", "дня", "дней"}},
{"hours", {"час", "часа", "часов"}},
{"minutes", {"минута", "минуты", "минут"}},
{"seconds", {"секунда", "секунды", "секунд"}}
};
std::string GetString (std::string arg)
{
auto it = strings.find(arg);
if (it == strings.end())
{
return arg;
} else {
return it->second;
}
}
std::string GetPlural (std::string arg, int n)
{
auto it = plurals.find(arg);
if (it == plurals.end())
{
return arg;
} else {
int form = plural(n);
return it->second[form];
}
}
} // language
} // i18n
} // i2p