first release of translation facility
* runtime - loading and translating * design-time - works with *.ts file (pip_tr utility) * compile-time - CMake macro for compile *.ts
This commit is contained in:
@@ -297,7 +297,7 @@ llong PIString::toNumberBase(const PIString & value, int base, bool * ok) {
|
||||
|
||||
|
||||
void PIString::appendFromChars(const char * c, int s, const char * codepage) {
|
||||
// piCout << "appendFromChars";
|
||||
// piCout << "appendFromChars";
|
||||
if (s == 0) return;
|
||||
int old_sz = size_s();
|
||||
if (s == -1) s = strlen(c);
|
||||
@@ -523,6 +523,31 @@ void PIString::trimsubstr(int & st, int & fn) const {
|
||||
}
|
||||
|
||||
|
||||
PIString PIString::minArgPlaceholder() {
|
||||
if (size() < 2) return {};
|
||||
int min = -1;
|
||||
PIString ret, tmp;
|
||||
for (int i = 0; i < size_s(); ++i) {
|
||||
if (at(i) == '%') {
|
||||
int j = 0;
|
||||
for (j = i + 1; j < size_s(); ++j) {
|
||||
if (!at(j).isDigit()) break;
|
||||
}
|
||||
bool ok = false;
|
||||
tmp = mid(i + 1, j - i - 1);
|
||||
int cur = tmp.toInt(10, &ok);
|
||||
if (!ok) continue;
|
||||
if (min < 0 || min > cur) {
|
||||
min = cur;
|
||||
ret = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ret.isEmpty()) return {};
|
||||
return "%" + ret;
|
||||
}
|
||||
|
||||
|
||||
uint PIString::hash() const {
|
||||
return piHashData((const uchar *)d.data(), d.size() * sizeof(PIChar));
|
||||
}
|
||||
@@ -1744,10 +1769,9 @@ ldouble PIString::toLDouble() const {
|
||||
//! piCout << s; // 47.6 GiB
|
||||
//! \endcode
|
||||
PIString & PIString::setReadableSize(llong bytes) {
|
||||
static const PIString tr_c = "PIString"_a;
|
||||
clear();
|
||||
if (bytes < 1024) {
|
||||
*this += (PIString::fromNumber(bytes) + " "_a + PITranslator::tr("B", tr_c));
|
||||
*this += (PIString::fromNumber(bytes) + " "_a + "B"_tr("PIString"));
|
||||
return *this;
|
||||
}
|
||||
double fres = bytes;
|
||||
@@ -1762,14 +1786,21 @@ PIString & PIString::setReadableSize(llong bytes) {
|
||||
}
|
||||
return false;
|
||||
};
|
||||
if (checkRange(PITranslator::tr("KiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("MiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("GiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("TiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("PiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("EiB", tr_c))) return *this;
|
||||
if (checkRange(PITranslator::tr("ZiB", tr_c))) return *this;
|
||||
checkRange(PITranslator::tr("YiB", tr_c), true);
|
||||
if (checkRange("KiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("MiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("GiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("TiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("PiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("EiB"_tr("PIString"))) return *this;
|
||||
if (checkRange("ZiB"_tr("PIString"))) return *this;
|
||||
checkRange("YiB"_tr("PIString"), true);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::arg(const PIString & v) {
|
||||
auto ph = minArgPlaceholder();
|
||||
if (!ph.isEmpty()) replaceAll(ph, v);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user