feat: add Farsi (fa) locale support
Add comprehensive Farsi translation for the webmail interface: - Create locales/fa/common.json with Farsi translations - Register 'fa' locale in i18n/routing.ts and i18n/request.ts - Add Iran flag component (FlagIR) to flag-icons.tsx - Add ف��رسی to language switcher dropdown - Add Farsi language name to English locale for language selector Translation covers login, sidebar, email viewer, composer, settings, notifications, calendar, contacts, errors, shortcuts, and more.
This commit is contained in:
@@ -233,6 +233,18 @@ export function FlagRO(props: FlagProps) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Iran – Green, White, Red horizontal with emblem (simplified) */
|
||||||
|
export function FlagIR(props: FlagProps) {
|
||||||
|
return (
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4 3" width={W} height={H} className={flagClass} {...props}>
|
||||||
|
<rect width="4" height="1" fill="#239F40" />
|
||||||
|
<rect y="1" width="4" height="1" fill="#fff" />
|
||||||
|
<rect y="2" width="4" height="1" fill="#DA0000" />
|
||||||
|
<circle cx="2" cy="1.5" r="0.3" fill="#DA0000" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Map locale codes to flag components */
|
/** Map locale codes to flag components */
|
||||||
export const flagComponents: Record<string, (props: FlagProps) => ReactElement> = {
|
export const flagComponents: Record<string, (props: FlagProps) => ReactElement> = {
|
||||||
cs: FlagCS,
|
cs: FlagCS,
|
||||||
@@ -254,4 +266,5 @@ export const flagComponents: Record<string, (props: FlagProps) => ReactElement>
|
|||||||
tr: FlagTR,
|
tr: FlagTR,
|
||||||
uk: FlagUA,
|
uk: FlagUA,
|
||||||
zh: FlagCN,
|
zh: FlagCN,
|
||||||
|
fa: FlagIR,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const languages = [
|
|||||||
{ value: 'da', label: 'Dansk' },
|
{ value: 'da', label: 'Dansk' },
|
||||||
{ value: 'de', label: 'Deutsch' },
|
{ value: 'de', label: 'Deutsch' },
|
||||||
{ value: 'en', label: 'English' },
|
{ value: 'en', label: 'English' },
|
||||||
|
{ value: 'fa', label: 'فارسی' },
|
||||||
{ value: 'es', label: 'Español' },
|
{ value: 'es', label: 'Español' },
|
||||||
{ value: 'fr', label: 'Français' },
|
{ value: 'fr', label: 'Français' },
|
||||||
{ value: 'it', label: 'Italiano' },
|
{ value: 'it', label: 'Italiano' },
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ export default getRequestConfig(async ({ requestLocale }) => {
|
|||||||
case 'es':
|
case 'es':
|
||||||
messages = (await import('../locales/es/common.json')).default;
|
messages = (await import('../locales/es/common.json')).default;
|
||||||
break;
|
break;
|
||||||
|
case 'fa':
|
||||||
|
messages = (await import('../locales/fa/common.json')).default;
|
||||||
|
break;
|
||||||
case 'fr':
|
case 'fr':
|
||||||
messages = (await import('../locales/fr/common.json')).default;
|
messages = (await import('../locales/fr/common.json')).default;
|
||||||
break;
|
break;
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ const localePrefix = (process.env.NEXT_PUBLIC_LOCALE_PREFIX ?? 'never') as
|
|||||||
| 'always'
|
| 'always'
|
||||||
| 'as-needed';
|
| 'as-needed';
|
||||||
|
|
||||||
const SUPPORTED_LOCALES = ['cs', 'da', 'de', 'en', 'es', 'fr', 'hu', 'it', 'ja', 'ko', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'tr', 'uk', 'zh'] as const;
|
const SUPPORTED_LOCALES = ['cs', 'da', 'de', 'en', 'es', 'fa', 'fr', 'hu', 'it', 'ja', 'ko', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'tr', 'uk', 'zh'] as const;
|
||||||
|
|
||||||
// Fallback locale used when the visitor's Accept-Language header does not
|
// Fallback locale used when the visitor's Accept-Language header does not
|
||||||
// match any supported locale (and no NEXT_LOCALE cookie is set yet). Admins
|
// match any supported locale (and no NEXT_LOCALE cookie is set yet). Admins
|
||||||
|
|||||||
@@ -804,7 +804,10 @@
|
|||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"uk": "Українська",
|
"uk": "Українська",
|
||||||
"zh": "简体中文"
|
"zh": "简体中文",
|
||||||
|
"fa": "فارسی",
|
||||||
|
"farsi": "فارسی",
|
||||||
|
"switch_to_farsi": "Switch to Farsi"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Settings",
|
"title": "Settings",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user