Localizations Setup (#6)

* Move assets into ElementX folder

* Add first version of localizer script

* Add generated strings & tests & fallback mechanism

* Rename strings file to Localizable

* Rename Assets to Resources

* Calculate preferred languages only when needed, remove share extension check

* Add comments in the localizer script

* Add GH workflow to push issues to the [ElementX board](https://github.com/orgs/vector-im/projects/43)

* Closes #16 - Add license file

* New version of localizer script, handle pluralization

* Move assets into ElementX folder

* Add first version of localizer script

* Add generated strings & tests & fallback mechanism

* Rename strings file to Localizable

* Rename Assets to Resources

* Calculate preferred languages only when needed, remove share extension check

* Add comments in the localizer script

* New version of localizer script, handle pluralization

* Revert login button text

* Add multiple dialect pluralization, fix string formatting

Co-authored-by: manuroe <manu@matrix.org>
Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
This commit is contained in:
ismailgulek
2022-04-26 22:48:17 +03:00
committed by GitHub
parent dc0bc5d9a4
commit 25eea4bcf1
184 changed files with 109472 additions and 14 deletions
+105
View File
@@ -0,0 +1,105 @@
//
// LocalizationTests.swift
// UnitTests
//
// Created by Ismail on 19.04.2022.
// Copyright © 2022 element.io. All rights reserved.
//
import XCTest
@testable import ElementX
class LocalizationTests: XCTestCase {
/// Test ElementL10n considers app language changes
func testAppLanguage() {
// set app language to English
Bundle.elementLanguage = "en"
XCTAssertEqual(ElementL10n.ok, "OK")
XCTAssertEqual(ElementL10n.continue, "Continue")
XCTAssertEqual(ElementL10n.loginSocialSignupWith("Github"), "Sign up with Github")
XCTAssertEqual(ElementL10n.roomSettingsMentionAndKeywordOnly, "Mentions & Keywords only")
XCTAssertEqual(ElementL10n.analyticsOptInListItem1, "We <b>don\'t</b> record or profile any account data")
// set app language to Turkish
Bundle.elementLanguage = "tr"
XCTAssertEqual(ElementL10n.ok, "Tamam")
XCTAssertEqual(ElementL10n.continue, "Devam et")
XCTAssertEqual(ElementL10n.loginSocialSignupWith("Github"), "Github ile kayıt ol")
XCTAssertEqual(ElementL10n.roomSettingsMentionAndKeywordOnly, "Yalnızca Söz ve Anahtar Kelimeler")
XCTAssertEqual(ElementL10n.analyticsOptInListItem1, "Herhangi bir hesap verisini <b>kaydetmiyoruz</b>")
}
/// Test fallback language for a language not supported at all
func testFallbackOnNotSupportedLanguage() {
// set app language to something Element don't support at all (chose 'Malay' language)
Bundle.elementLanguage = "ms"
Bundle.elementFallbackLanguage = "en"
XCTAssertEqual(ElementL10n.ok, "OK")
XCTAssertEqual(ElementL10n.continue, "Continue")
XCTAssertEqual(ElementL10n.entries(5), "5 entries")
}
/// Test fallback language for a language supported but poorly translated
func testFallbackOnNotTranslatedKey() {
// set app language to something Element supports but poorly translated (chose 'Sinhala' language)
Bundle.elementLanguage = "si"
Bundle.elementFallbackLanguage = "en"
XCTAssertEqual(ElementL10n.ok, "OK")
XCTAssertEqual(ElementL10n.continue, "Continue")
}
/// Test plurals that ElementL10n considers app language changes
func testPlurals() {
// set app language to English
Bundle.elementLanguage = "en"
XCTAssertEqual(ElementL10n.membershipChanges(1), "1 membership change")
XCTAssertEqual(ElementL10n.membershipChanges(2), "2 membership changes")
// set app language to Turkish
Bundle.elementLanguage = "tr"
XCTAssertEqual(ElementL10n.membershipChanges(1), "1 üyelik değişikliği")
XCTAssertEqual(ElementL10n.membershipChanges(2), "2 adet üyelik değişikliği")
// set app language to Polish
Bundle.elementLanguage = "pl"
XCTAssertEqual(ElementL10n.seconds(1), "1 sekunda") // one
XCTAssertEqual(ElementL10n.seconds(2), "2 sekundy") // few
XCTAssertEqual(ElementL10n.seconds(5), "5 sekund") // many, other
}
/// Test plurals fallback language for a language not supported at all
func testPluralsFallbackOnNotSupportedLanguage() {
// set app language to something Element don't support at all (chose 'Malay' language)
Bundle.elementLanguage = "ms"
Bundle.elementFallbackLanguage = "en"
XCTAssertEqual(ElementL10n.membershipChanges(1), "1 membership change")
XCTAssertEqual(ElementL10n.membershipChanges(2), "2 membership changes")
}
/// Test plurals fallback language for a language supported but poorly translated
func testPluralsFallbackOnNotTranslatedKey() {
// set app language to something Element supports but poorly translated (chose 'Sinhala' language)
Bundle.elementLanguage = "si"
Bundle.elementFallbackLanguage = "en"
XCTAssertEqual(ElementL10n.entries(1), "1 entry")
XCTAssertEqual(ElementL10n.entries(5), "5 entries")
}
/// Test untranslated strings
func testUntranslated() {
XCTAssertEqual(ElementL10n.untranslated, "Untranslated")
XCTAssertEqual(ElementL10n.untranslatedPlural(1), "One untranslated item")
XCTAssertEqual(ElementL10n.untranslatedPlural(5), "5 untranslated items")
}
}