Add methods for querying loaded Translation instances
This commit is contained in:
@ -228,37 +228,37 @@ TEST_CASE("[TranslationCSV] CSV import") {
|
||||
CHECK(result == OK);
|
||||
CHECK(gen_files.size() == 4);
|
||||
|
||||
TranslationServer *ts = TranslationServer::get_singleton();
|
||||
|
||||
Ref<TranslationDomain> td = TranslationServer::get_singleton()->get_or_add_domain("godot.test");
|
||||
for (const String &file : gen_files) {
|
||||
Ref<Translation> translation = ResourceLoader::load(file);
|
||||
CHECK(translation.is_valid());
|
||||
ts->add_translation(translation);
|
||||
td->add_translation(translation);
|
||||
}
|
||||
|
||||
ts->set_locale("en");
|
||||
td->set_locale_override("en");
|
||||
|
||||
// `tr` can be called on any Object, we reuse TranslationServer for convenience.
|
||||
CHECK(ts->tr("GOOD_MORNING") == "Good Morning");
|
||||
CHECK(ts->tr("GOOD_EVENING") == "Good Evening");
|
||||
CHECK(td->translate("GOOD_MORNING", StringName()) == "Good Morning");
|
||||
CHECK(td->translate("GOOD_EVENING", StringName()) == "Good Evening");
|
||||
|
||||
ts->set_locale("de");
|
||||
td->set_locale_override("de");
|
||||
|
||||
CHECK(ts->tr("GOOD_MORNING") == "Guten Morgen");
|
||||
CHECK(ts->tr("GOOD_EVENING") == "Good Evening"); // Left blank in CSV, should source from 'en'.
|
||||
CHECK(td->translate("GOOD_MORNING", StringName()) == "Guten Morgen");
|
||||
CHECK(td->translate("GOOD_EVENING", StringName()) == "Good Evening"); // Left blank in CSV, should source from 'en'.
|
||||
|
||||
ts->set_locale("ja");
|
||||
td->set_locale_override("ja");
|
||||
|
||||
CHECK(ts->tr("GOOD_MORNING") == String::utf8("おはよう"));
|
||||
CHECK(ts->tr("GOOD_EVENING") == String::utf8("こんばんは"));
|
||||
CHECK(td->translate("GOOD_MORNING", StringName()) == String::utf8("おはよう"));
|
||||
CHECK(td->translate("GOOD_EVENING", StringName()) == String::utf8("こんばんは"));
|
||||
|
||||
/* FIXME: This passes, but triggers a chain reaction that makes test_viewport
|
||||
* and test_text_edit explode in a billion glittery Unicode particles.
|
||||
ts->set_locale("fa");
|
||||
td->set_locale_override("fa");
|
||||
|
||||
CHECK(ts->tr("GOOD_MORNING") == String::utf8("صبح بخیر"));
|
||||
CHECK(ts->tr("GOOD_EVENING") == String::utf8("عصر بخیر"));
|
||||
CHECK(td->translate("GOOD_MORNING", String()) == String::utf8("صبح بخیر"));
|
||||
CHECK(td->translate("GOOD_EVENING", String()) == String::utf8("عصر بخیر"));
|
||||
*/
|
||||
|
||||
TranslationServer::get_singleton()->remove_domain("godot.test");
|
||||
}
|
||||
#endif // TOOLS_ENABLED
|
||||
|
||||
|
||||
@ -36,39 +36,55 @@
|
||||
|
||||
namespace TestTranslationServer {
|
||||
TEST_CASE("[TranslationServer] Translation operations") {
|
||||
Ref<TranslationDomain> td = TranslationServer::get_singleton()->get_or_add_domain("godot.test");
|
||||
CHECK(td->get_translations().is_empty());
|
||||
|
||||
Ref<Translation> t1 = memnew(Translation);
|
||||
t1->set_locale("uk");
|
||||
t1->set_locale("uk"); // Ukrainian.
|
||||
t1->add_message("Good Morning", String(U"Добрий ранок"));
|
||||
td->add_translation(t1);
|
||||
CHECK(td->get_translations().size() == 1);
|
||||
CHECK(td->has_translation_for_locale("uk", true));
|
||||
CHECK(td->has_translation_for_locale("uk", false));
|
||||
CHECK_FALSE(td->has_translation_for_locale("uk_UA", true));
|
||||
CHECK(td->has_translation_for_locale("uk_UA", false));
|
||||
CHECK(td->find_translations("uk", false).size() == 1);
|
||||
CHECK(td->find_translations("uk", true).size() == 1);
|
||||
CHECK(td->find_translations("uk_UA", false).size() == 1);
|
||||
CHECK(td->find_translations("uk_UA", true).size() == 0);
|
||||
|
||||
Ref<Translation> t2 = memnew(Translation);
|
||||
t2->set_locale("uk");
|
||||
t2->add_message("Hello Godot", String(U"你好戈多"));
|
||||
t2->set_locale("uk_UA"); // Ukrainian in Ukraine.
|
||||
t2->add_message("Hello Godot", String(U"Привіт, Годо."));
|
||||
td->add_translation(t2);
|
||||
CHECK(td->get_translations().size() == 2);
|
||||
CHECK(td->has_translation_for_locale("uk", true));
|
||||
CHECK(td->has_translation_for_locale("uk", false));
|
||||
CHECK(td->has_translation_for_locale("uk_UA", true));
|
||||
CHECK(td->has_translation_for_locale("uk_UA", false));
|
||||
CHECK(td->find_translations("uk", false).size() == 2);
|
||||
CHECK(td->find_translations("uk", true).size() == 1);
|
||||
CHECK(td->find_translations("uk_UA", false).size() == 2);
|
||||
CHECK(td->find_translations("uk_UA", true).size() == 1);
|
||||
|
||||
TranslationServer *ts = TranslationServer::get_singleton();
|
||||
td->set_locale_override("uk");
|
||||
CHECK(td->translate("Good Morning", StringName()) == String::utf8("Добрий ранок"));
|
||||
|
||||
// Adds translation for UK locale for the first time.
|
||||
int l_count_before = ts->get_loaded_locales().size();
|
||||
ts->add_translation(t1);
|
||||
int l_count_after = ts->get_loaded_locales().size();
|
||||
CHECK(l_count_after > l_count_before);
|
||||
td->remove_translation(t1);
|
||||
CHECK(td->get_translations().size() == 1);
|
||||
CHECK_FALSE(td->has_translation_for_locale("uk", true));
|
||||
CHECK(td->has_translation_for_locale("uk", false));
|
||||
CHECK(td->has_translation_for_locale("uk_UA", true));
|
||||
CHECK(td->has_translation_for_locale("uk_UA", false));
|
||||
CHECK(td->find_translations("uk", true).size() == 0);
|
||||
CHECK(td->find_translations("uk", false).size() == 1);
|
||||
CHECK(td->find_translations("uk_UA", true).size() == 1);
|
||||
CHECK(td->find_translations("uk_UA", false).size() == 1);
|
||||
|
||||
// Adds translation for UK locale again.
|
||||
ts->add_translation(t2);
|
||||
CHECK_EQ(ts->get_loaded_locales().size(), l_count_after);
|
||||
|
||||
// Removing that translation.
|
||||
ts->remove_translation(t2);
|
||||
CHECK_EQ(ts->get_loaded_locales().size(), l_count_after);
|
||||
|
||||
CHECK(ts->get_translation_object("uk").is_valid());
|
||||
|
||||
ts->set_locale("uk");
|
||||
CHECK(ts->translate("Good Morning") == String::utf8("Добрий ранок"));
|
||||
|
||||
ts->remove_translation(t1);
|
||||
CHECK(ts->get_translation_object("uk").is_null());
|
||||
// If no suitable Translation object has been found - the original message should be returned.
|
||||
CHECK(ts->translate("Good Morning") == "Good Morning");
|
||||
CHECK(td->translate("Good Morning", StringName()) == "Good Morning");
|
||||
|
||||
TranslationServer::get_singleton()->remove_domain("godot.test");
|
||||
}
|
||||
|
||||
TEST_CASE("[TranslationServer] Locale operations") {
|
||||
|
||||
Reference in New Issue
Block a user