diff options
Diffstat (limited to 'core/translation.h')
-rw-r--r-- | core/translation.h | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/core/translation.h b/core/translation.h index b4329c0ef7..cba25a434f 100644 --- a/core/translation.h +++ b/core/translation.h @@ -31,9 +31,6 @@ #ifndef TRANSLATION_H #define TRANSLATION_H -//#define DEBUG_TRANSLATION - -#include "core/math/expression.h" #include "core/resource.h" class Translation : public Resource { @@ -42,23 +39,11 @@ class Translation : public Resource { RES_BASE_EXTENSION("translation"); String locale = "en"; - int plural_forms = 0; // 0 means no "Plural-Forms" is given in the PO header file. The min for all languages is 1. - String plural_rule; - - // TLDR: Maps context to a list of source strings and translated strings. In PO terms, maps msgctxt to a list of msgid and msgstr. - // The first key corresponds to context, and the second key (of the contained HashMap) corresponds to source string. - // The value Vector<StringName> in the second map stores the translated strings. Index 0, 1, 2 matches msgstr[0], msgstr[1], msgstr[2]... in the case of plurals. - // Otherwise index 0 mathes to msgstr in a singular translation. - // Strings without context have "" as first key. - HashMap<StringName, HashMap<StringName, Vector<StringName>>> translation_map; - - Vector<String> _get_message_list() const; - - Dictionary _get_messages() const; - void _set_messages(const Dictionary &p_messages); + Map<StringName, StringName> translation_map; - int _get_plural_index(int p_n) const; - int _get_plural_index(const String &p_plural_rule, const Vector<String> &p_input_name, const Array &p_input_value, Ref<Expression> &r_expr) const; + virtual Vector<String> _get_message_list() const; + virtual Dictionary _get_messages() const; + virtual void _set_messages(const Dictionary &p_messages); protected: static void _bind_methods(); @@ -66,23 +51,14 @@ protected: public: void set_locale(const String &p_locale); _FORCE_INLINE_ String get_locale() const { return locale; } - void set_plural_rule(const String &p_plural_rule); - void add_message(const StringName &p_src_text, const StringName &p_xlated_text, const StringName &p_context = ""); - void add_plural_message(const StringName &p_src_text, const Vector<String> &p_plural_texts, const StringName &p_context = ""); + virtual void add_message(const StringName &p_src_text, const StringName &p_xlated_text, const StringName &p_context = ""); + virtual void add_plural_message(const StringName &p_src_text, const Vector<String> &p_plural_xlated_texts, const StringName &p_context = ""); virtual StringName get_message(const StringName &p_src_text, const StringName &p_context = "") const; //overridable for other implementations virtual StringName get_plural_message(const StringName &p_src_text, const StringName &p_plural_text, int p_n, const StringName &p_context = "") const; - void erase_message(const StringName &p_src_text, const StringName &p_context = ""); - - void get_message_list(List<StringName> *r_messages) const; - int get_message_count() const; - - int get_plural_forms() const; - String get_plural_rule() const; - -#ifdef DEBUG_TRANSLATION - void print_translation_map(); -#endif + virtual void erase_message(const StringName &p_src_text, const StringName &p_context = ""); + virtual void get_message_list(List<StringName> *r_messages) const; + virtual int get_message_count() const; Translation() {} }; @@ -104,7 +80,7 @@ class TranslationServer : public Object { static TranslationServer *singleton; bool _load_translations(const String &p_from); - StringName _get_message_from_translations(const StringName &p_message, const StringName &p_context, const String &p_locale, const String &p_message_plural = "", int p_n = -1) const; + StringName _get_message_from_translations(const StringName &p_message, const StringName &p_context, const String &p_locale, bool plural, const String &p_message_plural = "", int p_n = 0) const; static void _bind_methods(); @@ -116,6 +92,7 @@ public: void set_locale(const String &p_locale); String get_locale() const; + Ref<Translation> get_translation_object(const String &p_locale); String get_locale_name(const String &p_locale) const; |