Add translation preview in editor

This commit is contained in:
Haoyu Qiu
2024-09-13 00:50:09 +08:00
parent 6c9765d87e
commit 8d93b6a54c
15 changed files with 407 additions and 56 deletions

View File

@@ -287,7 +287,11 @@ void TranslationDomain::clear() {
}
StringName TranslationDomain::translate(const StringName &p_message, const StringName &p_context) const {
const String &locale = TranslationServer::get_singleton()->get_locale();
if (!enabled) {
return p_message;
}
const String &locale = locale_override.is_empty() ? TranslationServer::get_singleton()->get_locale() : locale_override;
StringName res = get_message_from_translations(locale, p_message, p_context);
const String &fallback = TranslationServer::get_singleton()->get_fallback_locale();
@@ -302,7 +306,11 @@ StringName TranslationDomain::translate(const StringName &p_message, const Strin
}
StringName TranslationDomain::translate_plural(const StringName &p_message, const StringName &p_message_plural, int p_n, const StringName &p_context) const {
const String &locale = TranslationServer::get_singleton()->get_locale();
if (!enabled) {
return p_n == 1 ? p_message : p_message_plural;
}
const String &locale = locale_override.is_empty() ? TranslationServer::get_singleton()->get_locale() : locale_override;
StringName res = get_message_from_translations(locale, p_message, p_message_plural, p_n, p_context);
const String &fallback = TranslationServer::get_singleton()->get_fallback_locale();
@@ -319,6 +327,22 @@ StringName TranslationDomain::translate_plural(const StringName &p_message, cons
return res;
}
String TranslationDomain::get_locale_override() const {
return locale_override;
}
void TranslationDomain::set_locale_override(const String &p_locale) {
locale_override = p_locale.is_empty() ? p_locale : TranslationServer::get_singleton()->standardize_locale(p_locale);
}
bool TranslationDomain::is_enabled() const {
return enabled;
}
void TranslationDomain::set_enabled(bool p_enabled) {
enabled = p_enabled;
}
bool TranslationDomain::is_pseudolocalization_enabled() const {
return pseudolocalization.enabled;
}
@@ -424,6 +448,10 @@ void TranslationDomain::_bind_methods() {
ClassDB::bind_method(D_METHOD("clear"), &TranslationDomain::clear);
ClassDB::bind_method(D_METHOD("translate", "message", "context"), &TranslationDomain::translate, DEFVAL(StringName()));
ClassDB::bind_method(D_METHOD("translate_plural", "message", "message_plural", "n", "context"), &TranslationDomain::translate_plural, DEFVAL(StringName()));
ClassDB::bind_method(D_METHOD("get_locale_override"), &TranslationDomain::get_locale_override);
ClassDB::bind_method(D_METHOD("set_locale_override", "locale"), &TranslationDomain::set_locale_override);
ClassDB::bind_method(D_METHOD("is_enabled"), &TranslationDomain::is_enabled);
ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &TranslationDomain::set_enabled);
ClassDB::bind_method(D_METHOD("is_pseudolocalization_enabled"), &TranslationDomain::is_pseudolocalization_enabled);
ClassDB::bind_method(D_METHOD("set_pseudolocalization_enabled", "enabled"), &TranslationDomain::set_pseudolocalization_enabled);
@@ -445,6 +473,7 @@ void TranslationDomain::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_pseudolocalization_suffix", "suffix"), &TranslationDomain::set_pseudolocalization_suffix);
ClassDB::bind_method(D_METHOD("pseudolocalize", "message"), &TranslationDomain::pseudolocalize);
ADD_PROPERTY(PropertyInfo(Variant::Type::BOOL, "enabled"), "set_enabled", "is_enabled");
ADD_PROPERTY(PropertyInfo(Variant::Type::BOOL, "pseudolocalization_enabled"), "set_pseudolocalization_enabled", "is_pseudolocalization_enabled");
ADD_PROPERTY(PropertyInfo(Variant::Type::BOOL, "pseudolocalization_accents_enabled"), "set_pseudolocalization_accents_enabled", "is_pseudolocalization_accents_enabled");
ADD_PROPERTY(PropertyInfo(Variant::Type::BOOL, "pseudolocalization_double_vowels_enabled"), "set_pseudolocalization_double_vowels_enabled", "is_pseudolocalization_double_vowels_enabled");

View File

@@ -49,6 +49,9 @@ class TranslationDomain : public RefCounted {
String suffix = "]";
};
bool enabled = true;
String locale_override;
HashSet<Ref<Translation>> translations;
PseudolocalizationConfig pseudolocalization;
@@ -79,6 +82,12 @@ public:
StringName translate(const StringName &p_message, const StringName &p_context) const;
StringName translate_plural(const StringName &p_message, const StringName &p_message_plural, int p_n, const StringName &p_context) const;
String get_locale_override() const;
void set_locale_override(const String &p_locale);
bool is_enabled() const;
void set_enabled(bool p_enabled);
bool is_pseudolocalization_enabled() const;
void set_pseudolocalization_enabled(bool p_enabled);
bool is_pseudolocalization_accents_enabled() const;

View File

@@ -406,21 +406,10 @@ void TranslationServer::clear() {
}
StringName TranslationServer::translate(const StringName &p_message, const StringName &p_context) const {
if (!enabled) {
return p_message;
}
return main_domain->translate(p_message, p_context);
}
StringName TranslationServer::translate_plural(const StringName &p_message, const StringName &p_message_plural, int p_n, const StringName &p_context) const {
if (!enabled) {
if (p_n == 1) {
return p_message;
}
return p_message_plural;
}
return main_domain->translate_plural(p_message, p_message_plural, p_n, p_context);
}

View File

@@ -47,8 +47,6 @@ class TranslationServer : public Object {
mutable HashMap<String, int> locale_compare_cache;
bool enabled = true;
static inline TranslationServer *singleton = nullptr;
static void _bind_methods();
@@ -96,11 +94,9 @@ class TranslationServer : public Object {
public:
_FORCE_INLINE_ static TranslationServer *get_singleton() { return singleton; }
Ref<TranslationDomain> get_main_domain() const { return main_domain; }
Ref<TranslationDomain> get_editor_domain() const { return editor_domain; }
void set_enabled(bool p_enabled) { enabled = p_enabled; }
_FORCE_INLINE_ bool is_enabled() const { return enabled; }
void set_locale(const String &p_locale);
String get_locale() const;
String get_fallback_locale() const;