kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
				
				
				
			Add polish pluralization rule
							rodzic
							
								
									df77d2b153
								
							
						
					
					
						commit
						05bef9f133
					
				|  | @ -1,10 +1,11 @@ | |||
| import type { InitModule } from '~/types' | ||||
| import type { SupportedLanguages } from '~/locales' | ||||
| 
 | ||||
| import { usePreferredLanguages } from '@vueuse/core' | ||||
| import { createI18n } from 'vue-i18n' | ||||
| import { nextTick } from 'vue' | ||||
| 
 | ||||
| import locales from '~/locales.json' | ||||
| import { locales } from '~/locales' | ||||
| import store from '~/store' | ||||
| 
 | ||||
| import useLogger from '~/composables/useLogger' | ||||
|  | @ -16,10 +17,11 @@ const localeFactory = import.meta.glob('../locales/*.json') as Record<string, () | |||
| const logger = useLogger() | ||||
| 
 | ||||
| const defaultLanguage = store.state.ui.currentLanguage ?? 'en' | ||||
| export const SUPPORTED_LOCALES = locales.reduce((map: Record<string, string>, locale) => { | ||||
|   map[locale.code] = locale.label | ||||
|   return map | ||||
| }, {}) | ||||
| 
 | ||||
| export const SUPPORTED_LOCALES = Object.fromEntries( | ||||
|   Object.entries(locales) | ||||
|     .map(([key, value]) => [key, value.label]) | ||||
| ) as Record<SupportedLanguages, string> | ||||
| 
 | ||||
| export const i18n = createI18n<false>({ | ||||
|   formatFallbackMessages: true, | ||||
|  | @ -27,11 +29,16 @@ export const i18n = createI18n<false>({ | |||
|   fallbackLocale: 'en_US', | ||||
|   legacy: false, | ||||
|   locale: 'en_US', | ||||
|   messages: { en_US: en } | ||||
|   messages: { en_US: en }, | ||||
|   pluralizationRules: Object.fromEntries( | ||||
|     Object.entries(locales) | ||||
|       .map(([key, value]) => [key, value.pluralizationRule]) | ||||
|       .filter(i => i[1]) | ||||
|   ) | ||||
| }) | ||||
| 
 | ||||
| export const setI18nLanguage = async (locale: string) => { | ||||
|   if (!Object.keys(SUPPORTED_LOCALES).includes(locale)) { | ||||
|   if (!(locale in locales)) { | ||||
|     throw new Error(`Unsupported locale: ${locale}`) | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,126 +0,0 @@ | |||
| [ | ||||
|   { | ||||
|     "code": "ar", | ||||
|     "label": "العربية" | ||||
|   }, | ||||
|   { | ||||
|     "code": "ca", | ||||
|     "label": "Català" | ||||
|   }, | ||||
|   { | ||||
|     "code": "cs", | ||||
|     "label": "Čeština" | ||||
|   }, | ||||
|   { | ||||
|     "code": "de", | ||||
|     "label": "Deutsch" | ||||
|   }, | ||||
|   { | ||||
|     "code": "en_GB", | ||||
|     "label": "English (UK)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "en_US", | ||||
|     "label": "English (United-States)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "eo", | ||||
|     "label": "Esperanto" | ||||
|   }, | ||||
|   { | ||||
|     "code": "es", | ||||
|     "label": "Español" | ||||
|   }, | ||||
|   { | ||||
|     "code": "eu", | ||||
|     "label": "Euskara" | ||||
|   }, | ||||
|   { | ||||
|     "code": "fr_FR", | ||||
|     "label": "Français" | ||||
|   }, | ||||
|   { | ||||
|     "code": "gl", | ||||
|     "label": "Galego" | ||||
|   }, | ||||
|   { | ||||
|     "code": "hu", | ||||
|     "label": "Magyar" | ||||
|   }, | ||||
|   { | ||||
|     "code": "it", | ||||
|     "label": "Italiano" | ||||
|   }, | ||||
|   { | ||||
|     "code": "ja_JP", | ||||
|     "label": "日本語" | ||||
|   }, | ||||
|   { | ||||
|     "code": "kab_DZ", | ||||
|     "label": "Taqbaylit" | ||||
|   }, | ||||
|   { | ||||
|     "code": "ko_KR", | ||||
|     "label": "한국어" | ||||
|   }, | ||||
|   { | ||||
|     "code": "nb_NO", | ||||
|     "label": "Bokmål" | ||||
|   }, | ||||
|   { | ||||
|     "code": "nn_NO", | ||||
|     "label": "Nynorsk" | ||||
|   }, | ||||
|   { | ||||
|     "code": "nl", | ||||
|     "label": "Nederlands" | ||||
|   }, | ||||
|   { | ||||
|     "code": "oc", | ||||
|     "label": "Occitan" | ||||
|   }, | ||||
|   { | ||||
|     "code": "pl", | ||||
|     "label": "Polski" | ||||
|   }, | ||||
|   { | ||||
|     "code": "pt_BR", | ||||
|     "label": "Português (Brasil)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "pt_PT", | ||||
|     "label": "Português (Portugal)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "ru", | ||||
|     "label": "Русский" | ||||
|   }, | ||||
|   { | ||||
|     "code": "sq", | ||||
|     "label": "Shqip" | ||||
|   }, | ||||
|   { | ||||
|     "code": "zh_Hans", | ||||
|     "label": "中文(简体)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "zh_Hant", | ||||
|     "label": "中文(繁體)" | ||||
|   }, | ||||
|   { | ||||
|     "code": "fa_IR", | ||||
|     "label": "فارسی" | ||||
|   }, | ||||
|   { | ||||
|     "code": "ml", | ||||
|     "label": "മലയാളം" | ||||
|   }, | ||||
|   { | ||||
|     "code": "sv", | ||||
|     "label": "Svenska" | ||||
|   }, | ||||
|   { | ||||
|     "code": "el", | ||||
|     "label": "Ελληνικά" | ||||
|   } | ||||
| ] | ||||
|  | @ -0,0 +1,121 @@ | |||
| import type { VueI18nOptions } from 'vue-i18n' | ||||
| 
 | ||||
| export type SupportedLanguages = 'ar' | 'ca' | 'cs' | 'de' | 'en_GB' | 'en_US' | 'eo' | 'es' | 'eu' | 'fr_FR' | ||||
|   | 'gl' | 'hu' | 'it' | 'ja_JP' | 'kab_DZ' | 'ko_KR' | 'nb_NO' | 'nl' | 'oc' | 'pl' | 'pt_BR' | 'pt_PT' | ||||
|   | 'ru' | 'sq' | 'zh_Hans' | 'zh_Hant' | 'fa_IR' | 'ml' | 'sv' | 'el' | 'nn_NO' | ||||
| 
 | ||||
| export interface Locale { | ||||
|   label: string | ||||
|   pluralizationRule?: Exclude<VueI18nOptions['pluralizationRules'], undefined>[string] | ||||
| } | ||||
| 
 | ||||
| export const locales: Record<SupportedLanguages, Locale> = { | ||||
|   ar: { | ||||
|     label: 'العربية' | ||||
|   }, | ||||
|   ca: { | ||||
|     label: 'Català' | ||||
|   }, | ||||
|   cs: { | ||||
|     label: 'Čeština' | ||||
|   }, | ||||
|   de: { | ||||
|     label: 'Deutsch' | ||||
|   }, | ||||
|   en_GB: { | ||||
|     label: 'English (UK)' | ||||
|   }, | ||||
|   en_US: { | ||||
|     label: 'English (United-States)' | ||||
|   }, | ||||
|   eo: { | ||||
|     label: 'Esperanto' | ||||
|   }, | ||||
|   es: { | ||||
|     label: 'Español' | ||||
|   }, | ||||
|   eu: { | ||||
|     label: 'Euskara' | ||||
|   }, | ||||
|   fr_FR: { | ||||
|     label: 'Français' | ||||
|   }, | ||||
|   gl: { | ||||
|     label: 'Galego' | ||||
|   }, | ||||
|   hu: { | ||||
|     label: 'Magyar' | ||||
|   }, | ||||
|   it: { | ||||
|     label: 'Italiano' | ||||
|   }, | ||||
|   ja_JP: { | ||||
|     label: '日本語' | ||||
|   }, | ||||
|   kab_DZ: { | ||||
|     label: 'Taqbaylit' | ||||
|   }, | ||||
|   ko_KR: { | ||||
|     label: '한국어' | ||||
|   }, | ||||
|   nb_NO: { | ||||
|     label: 'Bokmål' | ||||
|   }, | ||||
|   nn_NO: { | ||||
|     label: 'Nynorsk' | ||||
|   }, | ||||
|   nl: { | ||||
|     label: 'Nederlands' | ||||
|   }, | ||||
|   oc: { | ||||
|     label: 'Occitan' | ||||
|   }, | ||||
|   pl: { | ||||
|     label: 'Polski', | ||||
|     pluralizationRule: (n, choices) => { | ||||
|       // 0 rowerow | 1 rower | 2-4 rowery | 5-21 rowerow
 | ||||
|       // 1 rower | 2-4 rowery | 5-21 rowerow
 | ||||
| 
 | ||||
|       const isFew = (n % 10 >= 2 && n % 10 <= 4) && (n % 100 < 10 || n % 100 >= 20) | ||||
| 
 | ||||
|       if (choices === 3) { | ||||
|         if (n === 0) return 2 | ||||
|         if (n === 1) return 0 | ||||
|         return isFew ? 1 : 2 | ||||
|       } | ||||
| 
 | ||||
|       if (n === 0 || n === 1) return n | ||||
|       return isFew ? 2 : 3 | ||||
|     } | ||||
|   }, | ||||
|   pt_BR: { | ||||
|     label: 'Português (Brasil)' | ||||
|   }, | ||||
|   pt_PT: { | ||||
|     label: 'Português (Portugal)' | ||||
|   }, | ||||
|   ru: { | ||||
|     label: 'Русский' | ||||
|   }, | ||||
|   sq: { | ||||
|     label: 'Shqip' | ||||
|   }, | ||||
|   zh_Hans: { | ||||
|     label: '中文(简体)' | ||||
|   }, | ||||
|   zh_Hant: { | ||||
|     label: '中文(繁體)' | ||||
|   }, | ||||
|   fa_IR: { | ||||
|     label: 'فارسی' | ||||
|   }, | ||||
|   ml: { | ||||
|     label: 'മലയാളം' | ||||
|   }, | ||||
|   sv: { | ||||
|     label: 'Svenska' | ||||
|   }, | ||||
|   el: { | ||||
|     label: 'Ελληνικά' | ||||
|   } | ||||
| } | ||||
		Ładowanie…
	
		Reference in New Issue
	
	 wvffle
						wvffle