Browse Source

Fallback to msgid when translation is empty

access
mojsior 2 months ago
parent
commit
9feec9f003
  1. 82
      Source/utils/language.cpp

82
Source/utils/language.cpp

@ -285,46 +285,56 @@ bool ReadEntry(const std::byte *data, size_t dataSize, const MoEntry &e, char *r
} // namespace } // namespace
std::string_view LanguageParticularTranslate(std::string_view context, std::string_view message) std::string_view LanguageParticularTranslate(std::string_view context, std::string_view message)
{ {
constexpr const char Glue = '\004'; constexpr const char Glue = '\004';
std::string key = std::string(context); std::string key = std::string(context);
key.reserve(key.size() + 1 + message.size()); key.reserve(key.size() + 1 + message.size());
key += Glue; key += Glue;
key.append(message); key.append(message);
auto it = translation[0].find(key.c_str()); auto it = translation[0].find(key.c_str());
if (it == translation[0].end()) { if (it == translation[0].end()) {
return message; return message;
} }
return GetTranslation(it->second); const std::string_view translated = GetTranslation(it->second);
} // Treat empty translations as missing (prevents invisible UI entries / silent screen reader output).
return translated.empty() ? message : translated;
std::string_view LanguagePluralTranslate(const char *singular, std::string_view plural, int count) }
{
const int n = GetLocalPluralId(count); std::string_view LanguagePluralTranslate(const char *singular, std::string_view plural, int count)
{
auto it = translation[n].find(singular); const int n = GetLocalPluralId(count);
if (it == translation[n].end()) {
if (count != 1) auto it = translation[n].find(singular);
return plural; if (it == translation[n].end()) {
return singular; if (count != 1)
} return plural;
return singular;
return GetTranslation(it->second); }
}
const std::string_view translated = GetTranslation(it->second);
std::string_view LanguageTranslate(const char *key) if (!translated.empty())
{ return translated;
auto it = translation[0].find(key); // Treat empty translations as missing.
if (it == translation[0].end()) { if (count != 1)
return key; return plural;
} return singular;
}
return GetTranslation(it->second);
} std::string_view LanguageTranslate(const char *key)
{
auto it = translation[0].find(key);
if (it == translation[0].end()) {
return key;
}
const std::string_view translated = GetTranslation(it->second);
// Treat empty translations as missing.
return translated.empty() ? std::string_view(key) : translated;
}
bool HasTranslation(const std::string &locale) bool HasTranslation(const std::string &locale)
{ {

Loading…
Cancel
Save