diff --git a/app/i18n/index.js b/app/i18n/index.js index c82e9e17..ebe43076 100644 --- a/app/i18n/index.js +++ b/app/i18n/index.js @@ -95,6 +95,7 @@ export const setLanguage = (l) => { moment.locale(toMomentLocale(locale)); }; +i18n.translations = { en: translations.en?.() }; const defaultLanguage = { languageTag: 'en', isRTL: false }; const availableLanguages = Object.keys(translations); const { languageTag } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage; diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index 903da5e1..fee4b826 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -123,7 +123,6 @@ "creating_invite": "uitnodiging maken", "Channel_Name": "Kanaal Name", "Channels": "Kanalen", - "Chats": "Chats", "Call_already_ended": "Gesprek al beeïndigd!", "Click_to_join": "Klik om lid te worden!", "Close": "Sluiten", diff --git a/e2e/tests/assorted/04-setting.spec.js b/e2e/tests/assorted/04-setting.spec.js index a83b5b65..14bdbe71 100644 --- a/e2e/tests/assorted/04-setting.spec.js +++ b/e2e/tests/assorted/04-setting.spec.js @@ -63,19 +63,6 @@ describe('Settings screen', () => { }); describe('Usage', async() => { - it('should navigate to language view', async() => { - await element(by.id('settings-view-language')).tap(); - await waitFor(element(by.id('language-view'))).toBeVisible().withTimeout(60000); - await expect(element(by.id('language-view-zh-CN'))).toExist(); - await expect(element(by.id('language-view-de'))).toExist(); - await expect(element(by.id('language-view-en'))).toExist(); - await expect(element(by.id('language-view-fr'))).toExist(); - await expect(element(by.id('language-view-pt-BR'))).toExist(); - await expect(element(by.id('language-view-pt-PT'))).toExist(); - await expect(element(by.id('language-view-ru'))).toExist(); - await tapBack(); - }); - it('should tap clear cache and navigate to roomslistview', async() => { await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); await element(by.id('settings-view-clear-cache')).tap(); diff --git a/e2e/tests/assorted/12-i18n.spec.js b/e2e/tests/assorted/12-i18n.spec.js new file mode 100644 index 00000000..13e7c79b --- /dev/null +++ b/e2e/tests/assorted/12-i18n.spec.js @@ -0,0 +1,114 @@ +const { + device, element, by, waitFor +} = require('detox'); +const { navigateToLogin, login, sleep } = require('../../helpers/app'); +const { post } = require('../../helpers/data_setup'); + +const data = require('../../data'); +const testuser = data.users.regular +const defaultLaunchArgs = { permissions: { notifications: 'YES' } }; + +const navToLanguage = async() => { + await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000); + await element(by.id('rooms-list-view-sidebar')).tap(); + await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('sidebar-settings'))).toBeVisible().withTimeout(2000); + await element(by.id('sidebar-settings')).tap(); + await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); + await element(by.id('settings-view-language')).tap(); + await waitFor(element(by.id('language-view'))).toBeVisible().withTimeout(10000); +}; + +describe('i18n', () => { + describe('OS language', () => { + it('OS set to \'en\' and proper translate to \'en\'', async() => { + await device.launchApp({ + ...defaultLaunchArgs, + languageAndLocale: { + language: "en", + locale: "en" + }, + delete: true + }); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); + await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); + await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible(); + }); + + it('OS set to unavailable language and fallback to \'en\'', async() => { + await device.launchApp({ + ...defaultLaunchArgs, + languageAndLocale: { + language: "es-MX", + locale: "es-MX" + } + }); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); + await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); + await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible(); + }); + + /** + * This test might become outdated as soon as we support the language + * Although this seems to be a bad approach, that's the intention for having fallback enabled + */ + it('OS set to available language and fallback to \'en\' on strings missing translation', async() => { + await device.launchApp({ + ...defaultLaunchArgs, + languageAndLocale: { + language: "nl", + locale: "nl" + } + }); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); + await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); // Missing nl translation + await expect(element(by.id('create-workspace-button').and(by.label('Een nieuwe workspace maken')))).toBeVisible(); + }); + }); + + describe('Rocket.Chat language', () => { + before(async() => { + await device.launchApp(defaultLaunchArgs); + await navigateToLogin(); + await login(testuser.username, testuser.password); + }); + + it('should select \'en\'', async() => { + await navToLanguage(); + await element(by.id('language-view-en')).tap(); + await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000); + await element(by.id('rooms-list-view-sidebar')).tap(); + await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); + await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible(); + await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible(); + await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible(); + await element(by.id('sidebar-close-drawer')).tap(); + }); + + it('should select \'nl\' and fallback to \'en\'', async() => { + await navToLanguage(); + await element(by.id('language-view-nl')).tap(); + await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000); + await element(by.id('rooms-list-view-sidebar')).tap(); + await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); + await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible(); // fallback to en + await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profiel')))).toBeVisible(); + await expect(element(by.id('sidebar-settings').withDescendant(by.label('Instellingen')))).toBeVisible(); + await element(by.id('sidebar-close-drawer')).tap(); + }); + + it('should set unsupported language and fallback to \'en\'', async() => { + await post('users.setPreferences', { data: { language: 'eo' } }); // Set language to Esperanto + await device.launchApp(defaultLaunchArgs); + await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000); + await element(by.id('rooms-list-view-sidebar')).tap(); + await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); + // give the app some time to apply new language + await sleep(3000); + await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible(); + await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible(); + await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible(); + await post('users.setPreferences', { data: { language: 'en' } }); // Set back to english + }); + }) +}); \ No newline at end of file