mirror of
				https://github.com/tooot-app/app
				synced 2025-06-05 22:19:13 +02:00 
			
		
		
		
	Added support for KO and VI
This commit is contained in:
		| @@ -3,3 +3,8 @@ | |||||||
| [](LICENSE)    [](https://crowdin.tooot.app/project/tooot) | [](LICENSE)    [](https://crowdin.tooot.app/project/tooot) | ||||||
|  |  | ||||||
|    |    | ||||||
|  |  | ||||||
|  | ## Special thanks | ||||||
|  |  | ||||||
|  | @hellojaccc for Korean translation | ||||||
|  | @duy@mas.to for Vietnamese translation | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| languages(['zh-Hans', 'en-US']) | languages(['zh-Hans', 'vi', 'ko', 'en-US']) | ||||||
|  |  | ||||||
| name({ | name({ | ||||||
|   'default' => "tooot" |   'default' => "tooot" | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ import i18n from 'i18next' | |||||||
| import { initReactI18next } from 'react-i18next' | import { initReactI18next } from 'react-i18next' | ||||||
|  |  | ||||||
| import en from '@root/i18n/en/_all' | 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' | import zh_Hans from '@root/i18n/zh-Hans/_all' | ||||||
|  |  | ||||||
| i18n.use(initReactI18next).init({ | i18n.use(initReactI18next).init({ | ||||||
| @@ -11,7 +13,7 @@ i18n.use(initReactI18next).init({ | |||||||
|   ns: ['common'], |   ns: ['common'], | ||||||
|   defaultNS: 'common', |   defaultNS: 'common', | ||||||
|  |  | ||||||
|   resources: { 'zh-Hans': zh_Hans, en }, |   resources: { 'zh-Hans': zh_Hans, vi, ko, en }, | ||||||
|  |  | ||||||
|   saveMissing: true, |   saveMissing: true, | ||||||
|   missingKeyHandler: (ns, key) => { |   missingKeyHandler: (ns, key) => { | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								src/i18n/ko/_all.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/i18n/ko/_all.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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') | ||||||
|  | } | ||||||
| @@ -1,6 +1,8 @@ | |||||||
| const LOCALES = { | const LOCALES = { | ||||||
|   en: 'English', |   en: 'English', | ||||||
|  |   ko: '한국어', | ||||||
|  |   vi: 'Tiếng Việt', | ||||||
|   'zh-Hans': '简体中文' |   'zh-Hans': '简体中文' | ||||||
| } as {en: string} | } | ||||||
|  |  | ||||||
| export { LOCALES } | export { LOCALES } | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								src/i18n/vi/_all.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/i18n/vi/_all.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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') | ||||||
|  | } | ||||||
| @@ -3,8 +3,6 @@ import { RootState } from '@root/store' | |||||||
| import * as Updates from 'expo-updates' | import * as Updates from 'expo-updates' | ||||||
| import * as StoreReview from 'expo-store-review' | import * as StoreReview from 'expo-store-review' | ||||||
|  |  | ||||||
| export const supportedLngs = ['zh-Hans', 'en'] |  | ||||||
|  |  | ||||||
| export type ContextsState = { | export type ContextsState = { | ||||||
|   storeReview: { |   storeReview: { | ||||||
|     context: Readonly<number> |     context: Readonly<number> | ||||||
|   | |||||||
| @@ -1,14 +1,10 @@ | |||||||
| import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit' | import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit' | ||||||
|  | import { LOCALES } from '@root/i18n/locales' | ||||||
| import { RootState } from '@root/store' | import { RootState } from '@root/store' | ||||||
| import * as Analytics from 'expo-firebase-analytics' | import * as Analytics from 'expo-firebase-analytics' | ||||||
| import * as Localization from 'expo-localization' | import * as Localization from 'expo-localization' | ||||||
| import { pickBy } from 'lodash' | import { pickBy } from 'lodash' | ||||||
|  |  | ||||||
| enum AvailableLanguages { |  | ||||||
|   'zh-Hans', |  | ||||||
|   'en' |  | ||||||
| } |  | ||||||
|  |  | ||||||
| export const changeAnalytics = createAsyncThunk( | export const changeAnalytics = createAsyncThunk( | ||||||
|   'settings/changeAnalytics', |   'settings/changeAnalytics', | ||||||
|   async (newValue: SettingsState['analytics']) => { |   async (newValue: SettingsState['analytics']) => { | ||||||
| @@ -31,12 +27,10 @@ export const settingsInitialState = { | |||||||
|     enabled: false |     enabled: false | ||||||
|   }, |   }, | ||||||
|   language: Object.keys( |   language: Object.keys( | ||||||
|     pickBy(AvailableLanguages, (_, key) => Localization.locale.includes(key)) |     pickBy(LOCALES, (_, key) => Localization.locale.startsWith(key)) | ||||||
|   ) |   ) | ||||||
|     ? Object.keys( |     ? Object.keys( | ||||||
|         pickBy(AvailableLanguages, (_, key) => |         pickBy(LOCALES, (_, key) => Localization.locale.startsWith(key)) | ||||||
|           Localization.locale.includes(key) |  | ||||||
|         ) |  | ||||||
|       )[0] |       )[0] | ||||||
|     : 'en', |     : 'en', | ||||||
|   theme: 'auto', |   theme: 'auto', | ||||||
| @@ -88,10 +82,6 @@ export const getSettingsBrowser = (state: RootState) => state.settings.browser | |||||||
| export const getSettingsAnalytics = (state: RootState) => | export const getSettingsAnalytics = (state: RootState) => | ||||||
|   state.settings.analytics |   state.settings.analytics | ||||||
|  |  | ||||||
| export const { | export const { changeFontsize, changeLanguage, changeTheme, changeBrowser } = | ||||||
|   changeFontsize, |   settingsSlice.actions | ||||||
|   changeLanguage, |  | ||||||
|   changeTheme, |  | ||||||
|   changeBrowser |  | ||||||
| } = settingsSlice.actions |  | ||||||
| export default settingsSlice.reducer | export default settingsSlice.reducer | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user