Skip to content

Commit

Permalink
Further improvement for Chinese star translations
Browse files Browse the repository at this point in the history
  • Loading branch information
10110111 committed Mar 12, 2024
1 parent 1445a4b commit b43a94a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 29 deletions.
68 changes: 41 additions & 27 deletions src/core/StelTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,35 +113,52 @@ QString StelTranslator::qTranslateStar(const QString& s, const QString& c) const

QString StelTranslator::tryTranslateChineseStar(const QString& s, const QString& c) const
{
static const auto re = []{ QRegularExpression re("(.+) ([IXVLCDM]+)$"); re.optimize(); return re; }();
static const auto re = []{ QRegularExpression re("(.+)( [IXVLCDM]+)$"); re.optimize(); return re; }();
const auto match = re.match(s);
if (!match.hasMatch()) return {};

const auto translatedConstellation = tryQtranslate(match.captured(1), c);
if (translatedConstellation.isEmpty()) return {};

const auto num = parseRomanNumeral(match.captured(2));
Q_ASSERT(num < 100);

static const char16_t chars[10+1] = u"十一二三四五六七八九";

QString result = translatedConstellation;
int tens = num / 10;
const int units = num % 10;
if (tens >= 2)
auto constellation = match.captured(1);
bool addedPresent = false;
static const QString addedPattern(" Added");
if (constellation.endsWith(addedPattern))
{
result += chars[tens];
tens = 1;
constellation.chop(addedPattern.length());
addedPresent = true;
}
if (tens == 1)
{
result += chars[0];
}
if (units)

const auto translatedConstellation = tryQtranslate(constellation, c);
if (translatedConstellation.isEmpty()) return {};

auto number = match.captured(2);
if (getTrueLocaleName().startsWith("zh"))
{
result += chars[units];
const auto num = parseRomanNumeral(QStringView(number).mid(1));
Q_ASSERT(num < 100);

static const char16_t chars[10+1] = u"十一二三四五六七八九";

number = "";
int tens = num / 10;
const int units = num % 10;
if (tens >= 2)
{
number += chars[tens];
tens = 1;
}
if (tens == 1)
{
number += chars[0];
}
if (units)
{
number += chars[units];
}
}
return result;

if (!addedPresent) return translatedConstellation + number;

const auto& translatedAdded = qtranslate("Added", "skyculture");
return QString("%1 %2%3").arg(translatedConstellation, translatedAdded, number);
}

QString StelTranslator::tryQtranslate(const QString &s, const QString &c) const
Expand All @@ -151,11 +168,8 @@ QString StelTranslator::tryQtranslate(const QString &s, const QString &c) const

QString StelTranslator::tryQtranslateStar(const QString &s, const QString &c) const
{
if (getTrueLocaleName().startsWith("zh"))
{
const auto translated = tryTranslateChineseStar(s, c);
if (!translated.isEmpty()) return translated;
}
const auto translated = tryTranslateChineseStar(s, c);
if (!translated.isEmpty()) return translated;
return tryQtranslate(s, c);
}

Expand Down
4 changes: 2 additions & 2 deletions src/core/modules/StarMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2191,7 +2191,7 @@ QStringList StarMgr::listAllObjectsByType(const QString &objType, bool inEnglish
{
for (const auto &star : doubleStars)
{
result << trans.qtranslate(star);
result << trans.qTranslateStar(star);
}
}
break;
Expand All @@ -2217,7 +2217,7 @@ QStringList StarMgr::listAllObjectsByType(const QString &objType, bool inEnglish
{
for (const auto &star : variableStars)
{
result << trans.qtranslate(star);
result << trans.qTranslateStar(star);
}
}
break;
Expand Down

0 comments on commit b43a94a

Please sign in to comment.