From 7bf428f1796fde07e7b87b1c8e683c1b6cee8c9f Mon Sep 17 00:00:00 2001 From: Zhiyuan Zheng Date: Sun, 6 Feb 2022 23:25:16 +0100 Subject: [PATCH] Added support for KO and VI --- README.md | 5 +++++ fastlane/Deliverfile | 2 +- src/i18n/i18n.ts | 4 +++- src/i18n/ko/_all.ts | 17 +++++++++++++++++ src/i18n/locales.ts | 4 +++- src/i18n/vi/_all.ts | 17 +++++++++++++++++ src/utils/slices/contextsSlice.ts | 2 -- src/utils/slices/settingsSlice.ts | 20 +++++--------------- 8 files changed, 51 insertions(+), 20 deletions(-) create mode 100644 src/i18n/ko/_all.ts create mode 100644 src/i18n/vi/_all.ts diff --git a/README.md b/README.md index 88871488..d3be720b 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,8 @@ [![GPL-3.0](https://img.shields.io/github/license/tooot-app/push)](LICENSE) ![GitHub issues](https://img.shields.io/github/issues/tooot-app/app) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/tooot-app/app?include_prereleases) ![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/tooot-app/app) [![Crowdin](https://badges.crowdin.net/tooot/localized.svg)](https://crowdin.tooot.app/project/tooot) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/tooot-app/app/build) ![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/tooot-app/app/build/candidate?label=build%20candidate) ![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/tooot-app/app/build/release?label=build%20release) + +## Special thanks + +@hellojaccc for Korean translation +@duy@mas.to for Vietnamese translation \ No newline at end of file diff --git a/fastlane/Deliverfile b/fastlane/Deliverfile index 966e0dd0..41d6b634 100644 --- a/fastlane/Deliverfile +++ b/fastlane/Deliverfile @@ -1,4 +1,4 @@ -languages(['zh-Hans', 'en-US']) +languages(['zh-Hans', 'vi', 'ko', 'en-US']) name({ 'default' => "tooot" diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 54bf2b44..0199f4f2 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -2,6 +2,8 @@ import i18n from 'i18next' import { initReactI18next } from 'react-i18next' import en from '@root/i18n/en/_all' +import ko from '@root/i18n/ko/_all' +import vi from '@root/i18n/vi/_all' import zh_Hans from '@root/i18n/zh-Hans/_all' i18n.use(initReactI18next).init({ @@ -11,7 +13,7 @@ i18n.use(initReactI18next).init({ ns: ['common'], defaultNS: 'common', - resources: { 'zh-Hans': zh_Hans, en }, + resources: { 'zh-Hans': zh_Hans, vi, ko, en }, saveMissing: true, missingKeyHandler: (ns, key) => { diff --git a/src/i18n/ko/_all.ts b/src/i18n/ko/_all.ts new file mode 100644 index 00000000..d4c1b7c5 --- /dev/null +++ b/src/i18n/ko/_all.ts @@ -0,0 +1,17 @@ +export default { + common: require('./common'), + + screens: require('./screens'), + screenActions: require('./screens/actions'), + screenAnnouncements: require('./screens/announcements'), + screenCompose: require('./screens/compose'), + screenImageViewer: require('./screens/imageViewer'), + screenTabs: require('./screens/tabs'), + + componentInstance: require('./components/instance'), + componentMediaSelector: require('./components/mediaSelector'), + componentParse: require('./components/parse'), + componentRelationship: require('./components/relationship'), + componentRelativeTime: require('./components/relativeTime'), + componentTimeline: require('./components/timeline') +} diff --git a/src/i18n/locales.ts b/src/i18n/locales.ts index 532f37a6..593b400a 100644 --- a/src/i18n/locales.ts +++ b/src/i18n/locales.ts @@ -1,6 +1,8 @@ const LOCALES = { en: 'English', + ko: '한국어', + vi: 'Tiếng Việt', 'zh-Hans': '简体中文' -} as {en: string} +} export { LOCALES } diff --git a/src/i18n/vi/_all.ts b/src/i18n/vi/_all.ts new file mode 100644 index 00000000..d4c1b7c5 --- /dev/null +++ b/src/i18n/vi/_all.ts @@ -0,0 +1,17 @@ +export default { + common: require('./common'), + + screens: require('./screens'), + screenActions: require('./screens/actions'), + screenAnnouncements: require('./screens/announcements'), + screenCompose: require('./screens/compose'), + screenImageViewer: require('./screens/imageViewer'), + screenTabs: require('./screens/tabs'), + + componentInstance: require('./components/instance'), + componentMediaSelector: require('./components/mediaSelector'), + componentParse: require('./components/parse'), + componentRelationship: require('./components/relationship'), + componentRelativeTime: require('./components/relativeTime'), + componentTimeline: require('./components/timeline') +} diff --git a/src/utils/slices/contextsSlice.ts b/src/utils/slices/contextsSlice.ts index 24c93cd6..65d7c2e1 100644 --- a/src/utils/slices/contextsSlice.ts +++ b/src/utils/slices/contextsSlice.ts @@ -3,8 +3,6 @@ import { RootState } from '@root/store' import * as Updates from 'expo-updates' import * as StoreReview from 'expo-store-review' -export const supportedLngs = ['zh-Hans', 'en'] - export type ContextsState = { storeReview: { context: Readonly diff --git a/src/utils/slices/settingsSlice.ts b/src/utils/slices/settingsSlice.ts index fb2a6bb1..0436af47 100644 --- a/src/utils/slices/settingsSlice.ts +++ b/src/utils/slices/settingsSlice.ts @@ -1,14 +1,10 @@ import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit' +import { LOCALES } from '@root/i18n/locales' import { RootState } from '@root/store' import * as Analytics from 'expo-firebase-analytics' import * as Localization from 'expo-localization' import { pickBy } from 'lodash' -enum AvailableLanguages { - 'zh-Hans', - 'en' -} - export const changeAnalytics = createAsyncThunk( 'settings/changeAnalytics', async (newValue: SettingsState['analytics']) => { @@ -31,12 +27,10 @@ export const settingsInitialState = { enabled: false }, language: Object.keys( - pickBy(AvailableLanguages, (_, key) => Localization.locale.includes(key)) + pickBy(LOCALES, (_, key) => Localization.locale.startsWith(key)) ) ? Object.keys( - pickBy(AvailableLanguages, (_, key) => - Localization.locale.includes(key) - ) + pickBy(LOCALES, (_, key) => Localization.locale.startsWith(key)) )[0] : 'en', theme: 'auto', @@ -88,10 +82,6 @@ export const getSettingsBrowser = (state: RootState) => state.settings.browser export const getSettingsAnalytics = (state: RootState) => state.settings.analytics -export const { - changeFontsize, - changeLanguage, - changeTheme, - changeBrowser -} = settingsSlice.actions +export const { changeFontsize, changeLanguage, changeTheme, changeBrowser } = + settingsSlice.actions export default settingsSlice.reducer