diff --git a/apps/admin/app/dashboard/auth-control/apple/page.tsx b/apps/admin/app/dashboard/auth-control/apple/page.tsx
new file mode 100644
index 0000000..97cb5ff
--- /dev/null
+++ b/apps/admin/app/dashboard/auth-control/apple/page.tsx
@@ -0,0 +1,130 @@
+'use client';
+
+import { getOAuthConfig, oAuthCreateConfig, updateOAuthConfig } from '@/services/admin/system';
+import { useQuery } from '@tanstack/react-query';
+import { Label } from '@workspace/ui/components/label';
+import { Switch } from '@workspace/ui/components/switch';
+import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
+import { Textarea } from '@workspace/ui/components/textarea';
+import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
+import { useTranslations } from 'next-intl';
+import { toast } from 'sonner';
+
+export default function Page() {
+ const t = useTranslations('apple');
+
+ const { data, refetch } = useQuery({
+ queryKey: ['getOAuthConfig', 'apple'],
+ queryFn: async () => {
+ const { data } = await getOAuthConfig();
+ return data.data?.list.find((item) => item.platform === 'apple') as API.OAuthConfig;
+ },
+ });
+
+ async function updateConfig(key: keyof API.OAuthConfig, value: unknown) {
+ if (data?.[key] === value) return;
+ try {
+ if (data?.id) {
+ await oAuthCreateConfig({
+ ...data,
+ platform: 'apple',
+ [key]: value,
+ } as API.OAuthConfig);
+ } else {
+ await updateOAuthConfig({
+ ...data,
+ [key]: value,
+ } as API.OAuthConfig);
+ }
+ toast.success(t('saveSuccess'));
+ refetch();
+ } catch (error) {
+ toast.error(t('saveFailed'));
+ }
+ }
+
+ return (
+
+
+
+
+
+ {t('enableDescription')}
+
+
+ updateConfig('enabled', checked)}
+ />
+
+
+
+
+
+ {t('teamIdDescription')}
+
+
+ updateConfig('team_id', value)}
+ />
+
+
+
+
+
+ {t('clientIdDescription')}
+
+
+ updateConfig('client_id', value)}
+ />
+
+
+
+
+
+ {t('keyIdDescription')}
+
+
+ updateConfig('key_id', value)}
+ />
+
+
+
+
+
+ {t('clientSecretDescription')}
+
+
+
+
+
+
+
+ {t('redirectUriDescription')}
+
+
+ updateConfig('redirect', value)}
+ />
+
+
+
+
+ );
+}
diff --git a/apps/admin/app/dashboard/auth-control/facebook/page.tsx b/apps/admin/app/dashboard/auth-control/facebook/page.tsx
new file mode 100644
index 0000000..a1161bf
--- /dev/null
+++ b/apps/admin/app/dashboard/auth-control/facebook/page.tsx
@@ -0,0 +1,102 @@
+'use client';
+
+import { getOAuthConfig, oAuthCreateConfig, updateOAuthConfig } from '@/services/admin/system';
+import { useQuery } from '@tanstack/react-query';
+import { Label } from '@workspace/ui/components/label';
+import { Switch } from '@workspace/ui/components/switch';
+import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
+import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
+import { useTranslations } from 'next-intl';
+import { toast } from 'sonner';
+
+export default function Page() {
+ const t = useTranslations('facebook');
+
+ const { data, refetch } = useQuery({
+ queryKey: ['getOAuthConfig', 'facebook'],
+ queryFn: async () => {
+ const { data } = await getOAuthConfig();
+ return data.data?.list.find((item) => item.platform === 'facebook') as API.OAuthConfig;
+ },
+ });
+
+ async function updateConfig(key: keyof API.OAuthConfig, value: unknown) {
+ if (data?.[key] === value) return;
+ try {
+ if (data?.id) {
+ await oAuthCreateConfig({
+ ...data,
+ platform: 'facebook',
+ [key]: value,
+ } as API.OAuthConfig);
+ } else {
+ await updateOAuthConfig({
+ ...data,
+ [key]: value,
+ } as API.OAuthConfig);
+ }
+ toast.success(t('saveSuccess'));
+ refetch();
+ } catch (error) {
+ toast.error(t('saveFailed'));
+ }
+ }
+
+ return (
+
+
+
+
+
+ {t('enableDescription')}
+
+
+ updateConfig('enabled', checked)}
+ />
+
+
+
+
+
+ {t('clientIdDescription')}
+
+
+ updateConfig('client_id', value)}
+ />
+
+
+
+
+
+ {t('clientSecretDescription')}
+
+
+ updateConfig('client_secret', value)}
+ />
+
+
+
+
+
+ {t('redirectUriDescription')}
+
+
+ updateConfig('redirect', value)}
+ />
+
+
+
+
+ );
+}
diff --git a/apps/admin/app/dashboard/auth-control/github/page.tsx b/apps/admin/app/dashboard/auth-control/github/page.tsx
new file mode 100644
index 0000000..cc6570c
--- /dev/null
+++ b/apps/admin/app/dashboard/auth-control/github/page.tsx
@@ -0,0 +1,102 @@
+'use client';
+
+import { getOAuthConfig, oAuthCreateConfig, updateOAuthConfig } from '@/services/admin/system';
+import { useQuery } from '@tanstack/react-query';
+import { Label } from '@workspace/ui/components/label';
+import { Switch } from '@workspace/ui/components/switch';
+import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
+import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
+import { useTranslations } from 'next-intl';
+import { toast } from 'sonner';
+
+export default function Page() {
+ const t = useTranslations('github');
+
+ const { data, refetch } = useQuery({
+ queryKey: ['getOAuthConfig', 'github'],
+ queryFn: async () => {
+ const { data } = await getOAuthConfig();
+ return data.data?.list.find((item) => item.platform === 'github') as API.OAuthConfig;
+ },
+ });
+
+ async function updateConfig(key: keyof API.OAuthConfig, value: unknown) {
+ if (data?.[key] === value) return;
+ try {
+ if (data?.id) {
+ await oAuthCreateConfig({
+ ...data,
+ platform: 'github',
+ [key]: value,
+ } as API.OAuthConfig);
+ } else {
+ await updateOAuthConfig({
+ ...data,
+ [key]: value,
+ } as API.OAuthConfig);
+ }
+ toast.success(t('saveSuccess'));
+ refetch();
+ } catch (error) {
+ toast.error(t('saveFailed'));
+ }
+ }
+
+ return (
+
+
+
+
+
+ {t('enableDescription')}
+
+
+ updateConfig('enabled', checked)}
+ />
+
+
+
+
+
+ {t('clientIdDescription')}
+
+
+ updateConfig('client_id', value)}
+ />
+
+
+
+
+
+ {t('clientSecretDescription')}
+
+
+ updateConfig('client_secret', value)}
+ />
+
+
+
+
+
+ {t('redirectUriDescription')}
+
+
+ updateConfig('redirect', value)}
+ />
+
+
+
+
+ );
+}
diff --git a/apps/admin/app/dashboard/auth-control/google/page.tsx b/apps/admin/app/dashboard/auth-control/google/page.tsx
new file mode 100644
index 0000000..406c5f0
--- /dev/null
+++ b/apps/admin/app/dashboard/auth-control/google/page.tsx
@@ -0,0 +1,102 @@
+'use client';
+
+import { getOAuthConfig, oAuthCreateConfig, updateOAuthConfig } from '@/services/admin/system';
+import { useQuery } from '@tanstack/react-query';
+import { Label } from '@workspace/ui/components/label';
+import { Switch } from '@workspace/ui/components/switch';
+import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
+import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
+import { useTranslations } from 'next-intl';
+import { toast } from 'sonner';
+
+export default function Page() {
+ const t = useTranslations('google');
+
+ const { data, refetch } = useQuery({
+ queryKey: ['getOAuthConfig', 'google'],
+ queryFn: async () => {
+ const { data } = await getOAuthConfig();
+ return data.data?.list.find((item) => item.platform === 'google') as API.OAuthConfig;
+ },
+ });
+
+ async function updateConfig(key: keyof API.OAuthConfig, value: unknown) {
+ if (data?.[key] === value) return;
+ try {
+ if (data?.id) {
+ await oAuthCreateConfig({
+ ...data,
+ platform: 'google',
+ [key]: value,
+ } as API.OAuthConfig);
+ } else {
+ await updateOAuthConfig({
+ ...data,
+ [key]: value,
+ } as API.OAuthConfig);
+ }
+ toast.success(t('saveSuccess'));
+ refetch();
+ } catch (error) {
+ toast.error(t('saveFailed'));
+ }
+ }
+
+ return (
+
+
+
+
+
+ {t('enableDescription')}
+
+
+ updateConfig('enabled', checked)}
+ />
+
+
+
+
+
+ {t('clientIdDescription')}
+
+
+ updateConfig('client_id', value)}
+ />
+
+
+
+
+
+ {t('clientSecretDescription')}
+
+
+ updateConfig('client_secret', value)}
+ />
+
+
+
+
+
+ {t('redirectUriDescription')}
+
+
+ updateConfig('redirect', value)}
+ />
+
+
+
+
+ );
+}
diff --git a/apps/admin/app/dashboard/auth-control/telegram/page.tsx b/apps/admin/app/dashboard/auth-control/telegram/page.tsx
new file mode 100644
index 0000000..78f7d6e
--- /dev/null
+++ b/apps/admin/app/dashboard/auth-control/telegram/page.tsx
@@ -0,0 +1,102 @@
+'use client';
+
+import { getOAuthConfig, oAuthCreateConfig, updateOAuthConfig } from '@/services/admin/system';
+import { useQuery } from '@tanstack/react-query';
+import { Label } from '@workspace/ui/components/label';
+import { Switch } from '@workspace/ui/components/switch';
+import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
+import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
+import { useTranslations } from 'next-intl';
+import { toast } from 'sonner';
+
+export default function Page() {
+ const t = useTranslations('telegram');
+
+ const { data, refetch } = useQuery({
+ queryKey: ['getOAuthConfig', 'telegram'],
+ queryFn: async () => {
+ const { data } = await getOAuthConfig();
+ return data.data?.list.find((item) => item.platform === 'telegram') as API.OAuthConfig;
+ },
+ });
+
+ async function updateConfig(key: keyof API.OAuthConfig, value: unknown) {
+ if (data?.[key] === value) return;
+ try {
+ if (data?.id) {
+ await oAuthCreateConfig({
+ ...data,
+ platform: 'telegram',
+ [key]: value,
+ } as API.OAuthConfig);
+ } else {
+ await updateOAuthConfig({
+ ...data,
+ [key]: value,
+ } as API.OAuthConfig);
+ }
+ toast.success(t('saveSuccess'));
+ refetch();
+ } catch (error) {
+ toast.error(t('saveFailed'));
+ }
+ }
+
+ return (
+
+
+
+
+
+ {t('enableDescription')}
+
+
+ updateConfig('enabled', checked)}
+ />
+
+
+
+
+
+ {t('clientIdDescription')}
+
+
+ updateConfig('client_id', value)}
+ />
+
+
+
+
+
+ {t('clientSecretDescription')}
+
+
+ updateConfig('client_secret', value)}
+ />
+
+
+
+
+
+ {t('redirectUriDescription')}
+
+
+ updateConfig('redirect', value)}
+ />
+
+
+
+
+ );
+}
diff --git a/apps/admin/config/navs.ts b/apps/admin/config/navs.ts
index 3b65e60..f0ea219 100644
--- a/apps/admin/config/navs.ts
+++ b/apps/admin/config/navs.ts
@@ -11,30 +11,30 @@ export const AuthControl = [
title: 'Phone Number',
url: '/dashboard/auth-control/phone',
},
- // {
- // title: 'Apple',
- // url: '/dashboard/auth-control/apple',
- // },
- // {
- // title: 'Telegram',
- // url: '/dashboard/auth-control/telegram',
- // },
- // {
- // title: 'Google',
- // url: '/dashboard/auth-control/google',
- // },
- // {
- // title: 'Facebook',
- // url: '/dashboard/auth-control/facebook',
- // },
+ {
+ title: 'Telegram',
+ url: '/dashboard/auth-control/telegram',
+ },
+ {
+ title: 'Apple',
+ url: '/dashboard/auth-control/apple',
+ },
+ {
+ title: 'Google',
+ url: '/dashboard/auth-control/google',
+ },
+ {
+ title: 'Facebook',
+ url: '/dashboard/auth-control/facebook',
+ },
// {
// title: 'Twitter',
// url: '/dashboard/auth-control/twitter',
// },
- // {
- // title: 'GitHub',
- // url: '/dashboard/auth-control/github',
- // },
+ {
+ title: 'GitHub',
+ url: '/dashboard/auth-control/github',
+ },
];
export const navs = [
diff --git a/apps/admin/locales/cs-CZ/apple.json b/apps/admin/locales/cs-CZ/apple.json
new file mode 100644
index 0000000..e5a4d98
--- /dev/null
+++ b/apps/admin/locales/cs-CZ/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID služby",
+ "clientIdDescription": "Apple Service ID, který můžete získat z Apple Developer Portálu",
+ "clientSecret": "Soukromý klíč",
+ "clientSecretDescription": "Obsah soukromého klíče (.p8 soubor) používaný pro autentizaci s Apple",
+ "enable": "Povolit",
+ "enableDescription": "Po povolení se uživatelé mohou přihlásit pomocí svého Apple ID",
+ "keyId": "ID klíče",
+ "keyIdDescription": "ID vašeho soukromého klíče z Apple Developer Portálu",
+ "redirectUri": "Návratová URL",
+ "redirectUriDescription": "URL, na kterou Apple přesměruje po úspěšném ověření",
+ "saveFailed": "Uložení se nezdařilo",
+ "saveSuccess": "Uložení bylo úspěšné",
+ "teamId": "ID týmu",
+ "teamIdDescription": "ID týmu Apple Developer"
+}
diff --git a/apps/admin/locales/cs-CZ/facebook.json b/apps/admin/locales/cs-CZ/facebook.json
new file mode 100644
index 0000000..4daaef0
--- /dev/null
+++ b/apps/admin/locales/cs-CZ/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID klienta",
+ "clientIdDescription": "ID aplikace Facebook z konzole pro vývojáře Facebooku",
+ "clientSecret": "Klientský tajný klíč",
+ "clientSecretDescription": "Facebook App Secret z Facebook Developers Console",
+ "enable": "Povolit",
+ "enableDescription": "Po povolení se uživatelé mohou přihlásit pomocí svého účtu na Facebooku",
+ "redirectUri": "Autorizovaná přesměrovací URI",
+ "redirectUriDescription": "URL, na kterou bude uživatel přesměrován po ověření na Facebooku",
+ "saveFailed": "Uložení se nezdařilo",
+ "saveSuccess": "Uložení bylo úspěšné"
+}
diff --git a/apps/admin/locales/cs-CZ/github.json b/apps/admin/locales/cs-CZ/github.json
new file mode 100644
index 0000000..1ea2c1e
--- /dev/null
+++ b/apps/admin/locales/cs-CZ/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID klienta GitHub",
+ "clientIdDescription": "ID klienta z nastavení vaší GitHub OAuth aplikace",
+ "clientSecret": "GitHub klientský tajný klíč",
+ "clientSecretDescription": "Tajný klíč klienta z nastavení vaší GitHub OAuth aplikace",
+ "enable": "Povolit ověřování GitHub",
+ "enableDescription": "Povolit uživatelům přihlásit se pomocí jejich účtů na GitHubu",
+ "redirectUri": "URL pro zpětné volání autorizace",
+ "redirectUriDescription": "URL ve vaší aplikaci, kam budou uživatelé přesměrováni po autentizaci na GitHubu",
+ "saveFailed": "Nepodařilo se uložit nastavení GitHubu",
+ "saveSuccess": "Nastavení GitHubu bylo úspěšně uloženo"
+}
diff --git a/apps/admin/locales/cs-CZ/google.json b/apps/admin/locales/cs-CZ/google.json
new file mode 100644
index 0000000..35b850e
--- /dev/null
+++ b/apps/admin/locales/cs-CZ/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID klienta",
+ "clientIdDescription": "ID klienta Google OAuth 2.0 z Google Cloud Console",
+ "clientSecret": "Klientský tajný klíč",
+ "clientSecretDescription": "Tajný klíč klienta Google OAuth 2.0 z Google Cloud Console",
+ "enable": "Povolit",
+ "enableDescription": "Po povolení se uživatelé mohou přihlásit pomocí svého účtu Google",
+ "redirectUri": "Autorizovaná přesměrovací URI",
+ "redirectUriDescription": "URL, na kterou bude uživatel přesměrován po ověření Googlem",
+ "saveFailed": "Uložení se nezdařilo",
+ "saveSuccess": "Uložení bylo úspěšné"
+}
diff --git a/apps/admin/locales/cs-CZ/telegram.json b/apps/admin/locales/cs-CZ/telegram.json
new file mode 100644
index 0000000..149a1f0
--- /dev/null
+++ b/apps/admin/locales/cs-CZ/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID robota",
+ "clientIdDescription": "ID Telegram bota, které můžete získat od @BotFather",
+ "clientSecret": "Token robota",
+ "clientSecretDescription": "Telegram Bot Token, který můžete získat od @BotFather",
+ "enable": "Povolit",
+ "enableDescription": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu",
+ "redirectUri": "Přesměrovací URL",
+ "redirectUriDescription": "URL, na kterou Telegram přesměruje po úspěšném ověření",
+ "saveFailed": "Uložení se nezdařilo",
+ "saveSuccess": "Uložení bylo úspěšné"
+}
diff --git a/apps/admin/locales/de-DE/apple.json b/apps/admin/locales/de-DE/apple.json
new file mode 100644
index 0000000..3d9cd4a
--- /dev/null
+++ b/apps/admin/locales/de-DE/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Dienst-ID",
+ "clientIdDescription": "Apple-Dienst-ID, die Sie im Apple Developer Portal erhalten können",
+ "clientSecret": "Privater Schlüssel",
+ "clientSecretDescription": "Der private Schlüsselinhalt (.p8-Datei), der für die Authentifizierung bei Apple verwendet wird",
+ "enable": "Aktivieren",
+ "enableDescription": "Nach der Aktivierung können sich Benutzer mit ihrer Apple-ID anmelden",
+ "keyId": "Schlüssel-ID",
+ "keyIdDescription": "Die ID Ihres privaten Schlüssels aus dem Apple Developer Portal",
+ "redirectUri": "Rückkehr-URL",
+ "redirectUriDescription": "Die URL, zu der Apple nach erfolgreicher Authentifizierung weiterleitet",
+ "saveFailed": "Speichern fehlgeschlagen",
+ "saveSuccess": "Erfolgreich gespeichert",
+ "teamId": "Team-ID",
+ "teamIdDescription": "Apple Developer-Team-ID"
+}
diff --git a/apps/admin/locales/de-DE/facebook.json b/apps/admin/locales/de-DE/facebook.json
new file mode 100644
index 0000000..e1689cb
--- /dev/null
+++ b/apps/admin/locales/de-DE/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Kunden-ID",
+ "clientIdDescription": "Facebook-App-ID aus der Facebook-Entwicklerkonsole",
+ "clientSecret": "Client-Geheimnis",
+ "clientSecretDescription": "Facebook-App-Geheimnis aus der Facebook-Entwicklerkonsole",
+ "enable": "Aktivieren",
+ "enableDescription": "Nach der Aktivierung können sich Benutzer mit ihrem Facebook-Konto anmelden",
+ "redirectUri": "Autorisierte Umleitungs-URI",
+ "redirectUriDescription": "Die URL, zu der der Benutzer nach der Facebook-Authentifizierung weitergeleitet wird",
+ "saveFailed": "Speichern fehlgeschlagen",
+ "saveSuccess": "Erfolgreich gespeichert"
+}
diff --git a/apps/admin/locales/de-DE/github.json b/apps/admin/locales/de-DE/github.json
new file mode 100644
index 0000000..9c6fcd0
--- /dev/null
+++ b/apps/admin/locales/de-DE/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub-Client-ID",
+ "clientIdDescription": "Die Client-ID aus den Einstellungen Ihrer GitHub-OAuth-Anwendung",
+ "clientSecret": "GitHub-Clientgeheimnis",
+ "clientSecretDescription": "Das Client-Geheimnis aus den Einstellungen Ihrer GitHub-OAuth-Anwendung",
+ "enable": "GitHub-Authentifizierung aktivieren",
+ "enableDescription": "Ermöglichen Sie Benutzern, sich mit ihren GitHub-Konten anzumelden",
+ "redirectUri": "Autorisierungs-Callback-URL",
+ "redirectUriDescription": "Die URL in Ihrer Anwendung, zu der Benutzer nach der GitHub-Authentifizierung weitergeleitet werden",
+ "saveFailed": "Speichern der GitHub-Einstellungen fehlgeschlagen",
+ "saveSuccess": "GitHub-Einstellungen erfolgreich gespeichert"
+}
diff --git a/apps/admin/locales/de-DE/google.json b/apps/admin/locales/de-DE/google.json
new file mode 100644
index 0000000..da632a7
--- /dev/null
+++ b/apps/admin/locales/de-DE/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Kunden-ID",
+ "clientIdDescription": "Google OAuth 2.0-Client-ID aus der Google Cloud Console",
+ "clientSecret": "Client-Geheimnis",
+ "clientSecretDescription": "Google OAuth 2.0-Client-Geheimnis aus der Google Cloud Console",
+ "enable": "Aktivieren",
+ "enableDescription": "Nach der Aktivierung können sich Benutzer mit ihrem Google-Konto anmelden",
+ "redirectUri": "Autorisierte Umleitungs-URI",
+ "redirectUriDescription": "Die URL, zu der der Benutzer nach der Google-Authentifizierung weitergeleitet wird",
+ "saveFailed": "Speichern fehlgeschlagen",
+ "saveSuccess": "Erfolgreich gespeichert"
+}
diff --git a/apps/admin/locales/de-DE/telegram.json b/apps/admin/locales/de-DE/telegram.json
new file mode 100644
index 0000000..c2f4ffd
--- /dev/null
+++ b/apps/admin/locales/de-DE/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Bot-ID",
+ "clientIdDescription": "Telegram-Bot-ID, die Sie von @BotFather erhalten können",
+ "clientSecret": "Bot-Token",
+ "clientSecretDescription": "Telegram-Bot-Token, den Sie von @BotFather erhalten können",
+ "enable": "Aktivieren",
+ "enableDescription": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert",
+ "redirectUri": "Weiterleitungs-URL",
+ "redirectUriDescription": "Die URL, zu der Telegram nach erfolgreicher Authentifizierung weiterleitet",
+ "saveFailed": "Speichern fehlgeschlagen",
+ "saveSuccess": "Erfolgreich gespeichert"
+}
diff --git a/apps/admin/locales/en-US/apple.json b/apps/admin/locales/en-US/apple.json
new file mode 100644
index 0000000..0316127
--- /dev/null
+++ b/apps/admin/locales/en-US/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Service ID",
+ "clientIdDescription": "Apple Service ID, you can get it from Apple Developer Portal",
+ "clientSecret": "Private Key",
+ "clientSecretDescription": "The private key content (.p8 file) used for authentication with Apple",
+ "enable": "Enable",
+ "enableDescription": "After enabling, users can sign in with their Apple ID",
+ "keyId": "Key ID",
+ "keyIdDescription": "The ID of your private key from Apple Developer Portal",
+ "redirectUri": "Return URL",
+ "redirectUriDescription": "The URL that Apple will redirect to after successful authentication",
+ "saveFailed": "Save failed",
+ "saveSuccess": "Save successful",
+ "teamId": "Team ID",
+ "teamIdDescription": "Apple Developer Team ID"
+}
diff --git a/apps/admin/locales/en-US/facebook.json b/apps/admin/locales/en-US/facebook.json
new file mode 100644
index 0000000..4352d59
--- /dev/null
+++ b/apps/admin/locales/en-US/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Client ID",
+ "clientIdDescription": "Facebook App ID from Facebook Developers Console",
+ "clientSecret": "Client Secret",
+ "clientSecretDescription": "Facebook App Secret from Facebook Developers Console",
+ "enable": "Enable",
+ "enableDescription": "After enabling, users can sign in with their Facebook account",
+ "redirectUri": "Authorized redirect URI",
+ "redirectUriDescription": "The URL to which the user will be redirected after Facebook authentication",
+ "saveFailed": "Save failed",
+ "saveSuccess": "Save successful"
+}
diff --git a/apps/admin/locales/en-US/github.json b/apps/admin/locales/en-US/github.json
new file mode 100644
index 0000000..2967d98
--- /dev/null
+++ b/apps/admin/locales/en-US/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub Client ID",
+ "clientIdDescription": "The client ID from your GitHub OAuth application settings",
+ "clientSecret": "GitHub Client Secret",
+ "clientSecretDescription": "The client secret from your GitHub OAuth application settings",
+ "enable": "Enable GitHub Authentication",
+ "enableDescription": "Allow users to sign in with their GitHub accounts",
+ "redirectUri": "Authorization callback URL",
+ "redirectUriDescription": "The URL in your application where users will be redirected after GitHub authentication",
+ "saveFailed": "Failed to save GitHub settings",
+ "saveSuccess": "GitHub settings saved successfully"
+}
diff --git a/apps/admin/locales/en-US/google.json b/apps/admin/locales/en-US/google.json
new file mode 100644
index 0000000..c7df958
--- /dev/null
+++ b/apps/admin/locales/en-US/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Client ID",
+ "clientIdDescription": "Google OAuth 2.0 Client ID from Google Cloud Console",
+ "clientSecret": "Client Secret",
+ "clientSecretDescription": "Google OAuth 2.0 Client Secret from Google Cloud Console",
+ "enable": "Enable",
+ "enableDescription": "After enabling, users can sign in with their Google account",
+ "redirectUri": "Authorized redirect URI",
+ "redirectUriDescription": "The URL to which the user will be redirected after Google authentication",
+ "saveFailed": "Save failed",
+ "saveSuccess": "Save successful"
+}
diff --git a/apps/admin/locales/en-US/telegram.json b/apps/admin/locales/en-US/telegram.json
new file mode 100644
index 0000000..2a8f75a
--- /dev/null
+++ b/apps/admin/locales/en-US/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Bot ID",
+ "clientIdDescription": "Telegram Bot ID, you can get it from @BotFather",
+ "clientSecret": "Bot Token",
+ "clientSecretDescription": "Telegram Bot Token, you can get it from @BotFather",
+ "enable": "Enable",
+ "enableDescription": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled",
+ "redirectUri": "Redirect URL",
+ "redirectUriDescription": "The URL that Telegram will redirect to after successful authentication",
+ "saveFailed": "Save failed",
+ "saveSuccess": "Save successful"
+}
diff --git a/apps/admin/locales/es-ES/apple.json b/apps/admin/locales/es-ES/apple.json
new file mode 100644
index 0000000..2f6443e
--- /dev/null
+++ b/apps/admin/locales/es-ES/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID de servicio",
+ "clientIdDescription": "ID de servicio de Apple, puedes obtenerlo en el Portal de Desarrolladores de Apple",
+ "clientSecret": "Clave Privada",
+ "clientSecretDescription": "El contenido de la clave privada (archivo .p8) utilizado para la autenticación con Apple",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, los usuarios pueden iniciar sesión con su ID de Apple",
+ "keyId": "ID de clave",
+ "keyIdDescription": "El ID de tu clave privada del Portal de Desarrolladores de Apple",
+ "redirectUri": "URL de retorno",
+ "redirectUriDescription": "La URL a la que Apple redirigirá después de una autenticación exitosa",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso",
+ "teamId": "ID del equipo",
+ "teamIdDescription": "ID de equipo de desarrolladores de Apple"
+}
diff --git a/apps/admin/locales/es-ES/facebook.json b/apps/admin/locales/es-ES/facebook.json
new file mode 100644
index 0000000..e9a5987
--- /dev/null
+++ b/apps/admin/locales/es-ES/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente",
+ "clientIdDescription": "ID de la aplicación de Facebook desde la Consola de Desarrolladores de Facebook",
+ "clientSecret": "Secreto del Cliente",
+ "clientSecretDescription": "Secreto de la aplicación de Facebook desde la Consola de Desarrolladores de Facebook",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, los usuarios pueden iniciar sesión con su cuenta de Facebook",
+ "redirectUri": "URI de redirección autorizada",
+ "redirectUriDescription": "La URL a la que se redirigirá al usuario después de la autenticación de Facebook",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/es-ES/github.json b/apps/admin/locales/es-ES/github.json
new file mode 100644
index 0000000..38bcaec
--- /dev/null
+++ b/apps/admin/locales/es-ES/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente de GitHub",
+ "clientIdDescription": "El ID de cliente de la configuración de tu aplicación OAuth de GitHub",
+ "clientSecret": "Secreto del Cliente de GitHub",
+ "clientSecretDescription": "El secreto del cliente de la configuración de tu aplicación OAuth de GitHub",
+ "enable": "Habilitar la autenticación de GitHub",
+ "enableDescription": "Permitir a los usuarios iniciar sesión con sus cuentas de GitHub",
+ "redirectUri": "URL de redirección de autorización",
+ "redirectUriDescription": "La URL en tu aplicación a la que los usuarios serán redirigidos después de la autenticación de GitHub",
+ "saveFailed": "Error al guardar la configuración de GitHub",
+ "saveSuccess": "Configuración de GitHub guardada con éxito"
+}
diff --git a/apps/admin/locales/es-ES/google.json b/apps/admin/locales/es-ES/google.json
new file mode 100644
index 0000000..3d7cf37
--- /dev/null
+++ b/apps/admin/locales/es-ES/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente",
+ "clientIdDescription": "ID de cliente de Google OAuth 2.0 desde la Consola de Google Cloud",
+ "clientSecret": "Secreto del Cliente",
+ "clientSecretDescription": "Secreto del cliente de Google OAuth 2.0 desde la Consola de Google Cloud",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, los usuarios pueden iniciar sesión con su cuenta de Google",
+ "redirectUri": "URI de redirección autorizada",
+ "redirectUriDescription": "La URL a la que se redirigirá al usuario después de la autenticación de Google",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/es-ES/telegram.json b/apps/admin/locales/es-ES/telegram.json
new file mode 100644
index 0000000..3b28151
--- /dev/null
+++ b/apps/admin/locales/es-ES/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID del Bot",
+ "clientIdDescription": "ID del Bot de Telegram, lo puedes obtener de @BotFather",
+ "clientSecret": "Token del Bot",
+ "clientSecretDescription": "Token del Bot de Telegram, lo puedes obtener de @BotFather",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación de teléfonos móviles",
+ "redirectUri": "URL de redirección",
+ "redirectUriDescription": "La URL a la que Telegram redirigirá después de una autenticación exitosa",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/es-MX/apple.json b/apps/admin/locales/es-MX/apple.json
new file mode 100644
index 0000000..5e4d5ee
--- /dev/null
+++ b/apps/admin/locales/es-MX/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID de Servicio",
+ "clientIdDescription": "ID de servicio de Apple, lo puedes obtener en el Portal de Desarrolladores de Apple",
+ "clientSecret": "Clave Privada",
+ "clientSecretDescription": "El contenido de la clave privada (archivo .p8) utilizado para la autenticación con Apple",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitarlo, los usuarios pueden iniciar sesión con su ID de Apple",
+ "keyId": "ID de clave",
+ "keyIdDescription": "El ID de tu clave privada del Portal de Desarrolladores de Apple",
+ "redirectUri": "URL de retorno",
+ "redirectUriDescription": "La URL a la que Apple redirigirá después de la autenticación exitosa",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso",
+ "teamId": "ID del equipo",
+ "teamIdDescription": "ID de Equipo de Desarrolladores de Apple"
+}
diff --git a/apps/admin/locales/es-MX/facebook.json b/apps/admin/locales/es-MX/facebook.json
new file mode 100644
index 0000000..e9a5987
--- /dev/null
+++ b/apps/admin/locales/es-MX/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente",
+ "clientIdDescription": "ID de la aplicación de Facebook desde la Consola de Desarrolladores de Facebook",
+ "clientSecret": "Secreto del Cliente",
+ "clientSecretDescription": "Secreto de la aplicación de Facebook desde la Consola de Desarrolladores de Facebook",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, los usuarios pueden iniciar sesión con su cuenta de Facebook",
+ "redirectUri": "URI de redirección autorizada",
+ "redirectUriDescription": "La URL a la que se redirigirá al usuario después de la autenticación de Facebook",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/es-MX/github.json b/apps/admin/locales/es-MX/github.json
new file mode 100644
index 0000000..b62c73c
--- /dev/null
+++ b/apps/admin/locales/es-MX/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente de GitHub",
+ "clientIdDescription": "El ID de cliente de la configuración de tu aplicación OAuth de GitHub",
+ "clientSecret": "Secreto del Cliente de GitHub",
+ "clientSecretDescription": "El secreto del cliente de la configuración de tu aplicación OAuth de GitHub",
+ "enable": "Habilitar la autenticación de GitHub",
+ "enableDescription": "Permitir a los usuarios iniciar sesión con sus cuentas de GitHub",
+ "redirectUri": "URL de redirección de autorización",
+ "redirectUriDescription": "La URL en tu aplicación a la que los usuarios serán redirigidos después de la autenticación de GitHub",
+ "saveFailed": "Error al guardar la configuración de GitHub",
+ "saveSuccess": "Configuración de GitHub guardada exitosamente"
+}
diff --git a/apps/admin/locales/es-MX/google.json b/apps/admin/locales/es-MX/google.json
new file mode 100644
index 0000000..3d7cf37
--- /dev/null
+++ b/apps/admin/locales/es-MX/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID de Cliente",
+ "clientIdDescription": "ID de cliente de Google OAuth 2.0 desde la Consola de Google Cloud",
+ "clientSecret": "Secreto del Cliente",
+ "clientSecretDescription": "Secreto del cliente de Google OAuth 2.0 desde la Consola de Google Cloud",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, los usuarios pueden iniciar sesión con su cuenta de Google",
+ "redirectUri": "URI de redirección autorizada",
+ "redirectUriDescription": "La URL a la que se redirigirá al usuario después de la autenticación de Google",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/es-MX/telegram.json b/apps/admin/locales/es-MX/telegram.json
new file mode 100644
index 0000000..3b28151
--- /dev/null
+++ b/apps/admin/locales/es-MX/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID del Bot",
+ "clientIdDescription": "ID del Bot de Telegram, lo puedes obtener de @BotFather",
+ "clientSecret": "Token del Bot",
+ "clientSecretDescription": "Token del Bot de Telegram, lo puedes obtener de @BotFather",
+ "enable": "Habilitar",
+ "enableDescription": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación de teléfonos móviles",
+ "redirectUri": "URL de redirección",
+ "redirectUriDescription": "La URL a la que Telegram redirigirá después de una autenticación exitosa",
+ "saveFailed": "Error al guardar",
+ "saveSuccess": "Guardado exitoso"
+}
diff --git a/apps/admin/locales/fa-IR/apple.json b/apps/admin/locales/fa-IR/apple.json
new file mode 100644
index 0000000..ee8e4db
--- /dev/null
+++ b/apps/admin/locales/fa-IR/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "شناسه سرویس",
+ "clientIdDescription": "شناسه سرویس اپل، میتوانید آن را از پورتال توسعهدهندگان اپل دریافت کنید",
+ "clientSecret": "کلید خصوصی",
+ "clientSecretDescription": "محتوای کلید خصوصی (فایل .p8) که برای احراز هویت با اپل استفاده میشود",
+ "enable": "فعال کردن",
+ "enableDescription": "پس از فعالسازی، کاربران میتوانند با Apple ID خود وارد شوند",
+ "keyId": "شناسه کلید",
+ "keyIdDescription": "شناسه کلید خصوصی شما از پورتال توسعهدهنده اپل",
+ "redirectUri": "آدرس بازگشت",
+ "redirectUriDescription": "آدرسی که اپل پس از احراز هویت موفقیتآمیز به آن هدایت میکند",
+ "saveFailed": "ذخیرهسازی ناموفق بود",
+ "saveSuccess": "ذخیره با موفقیت انجام شد",
+ "teamId": "شناسه تیم",
+ "teamIdDescription": "شناسه تیم توسعهدهنده اپل"
+}
diff --git a/apps/admin/locales/fa-IR/facebook.json b/apps/admin/locales/fa-IR/facebook.json
new file mode 100644
index 0000000..2e1b67a
--- /dev/null
+++ b/apps/admin/locales/fa-IR/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "شناسه مشتری",
+ "clientIdDescription": "شناسه برنامه فیسبوک از کنسول توسعهدهندگان فیسبوک",
+ "clientSecret": "رمز مشتری",
+ "clientSecretDescription": "رمز مخفی برنامه فیسبوک از کنسول توسعهدهندگان فیسبوک",
+ "enable": "فعال کردن",
+ "enableDescription": "پس از فعالسازی، کاربران میتوانند با حساب فیسبوک خود وارد شوند",
+ "redirectUri": "نشانی مجاز تغییر مسیر",
+ "redirectUriDescription": "آدرس URL که کاربر پس از احراز هویت فیسبوک به آن هدایت میشود",
+ "saveFailed": "ذخیرهسازی ناموفق بود",
+ "saveSuccess": "ذخیره با موفقیت انجام شد"
+}
diff --git a/apps/admin/locales/fa-IR/github.json b/apps/admin/locales/fa-IR/github.json
new file mode 100644
index 0000000..5df499d
--- /dev/null
+++ b/apps/admin/locales/fa-IR/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "شناسه مشتری GitHub",
+ "clientIdDescription": "شناسه مشتری از تنظیمات برنامه OAuth GitHub شما",
+ "clientSecret": "رمز مشتری GitHub",
+ "clientSecretDescription": "رمز مخفی مشتری از تنظیمات برنامه OAuth گیتهاب شما",
+ "enable": "فعالسازی احراز هویت GitHub",
+ "enableDescription": "اجازه دهید کاربران با حسابهای GitHub خود وارد شوند",
+ "redirectUri": "نشانی بازگشت مجوز",
+ "redirectUriDescription": "نشانی اینترنتی در برنامه شما که کاربران پس از احراز هویت در GitHub به آن هدایت میشوند",
+ "saveFailed": "ذخیره تنظیمات GitHub ناموفق بود",
+ "saveSuccess": "تنظیمات GitHub با موفقیت ذخیره شد"
+}
diff --git a/apps/admin/locales/fa-IR/google.json b/apps/admin/locales/fa-IR/google.json
new file mode 100644
index 0000000..78d5644
--- /dev/null
+++ b/apps/admin/locales/fa-IR/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "شناسه مشتری",
+ "clientIdDescription": "شناسه مشتری OAuth 2.0 گوگل از کنسول ابری گوگل",
+ "clientSecret": "راز مشتری",
+ "clientSecretDescription": "رمز مشتری OAuth 2.0 گوگل از کنسول Google Cloud",
+ "enable": "فعال کردن",
+ "enableDescription": "پس از فعالسازی، کاربران میتوانند با حساب گوگل خود وارد شوند",
+ "redirectUri": "نشانی مجاز تغییر مسیر",
+ "redirectUriDescription": "آدرس URL که کاربر پس از احراز هویت گوگل به آن هدایت میشود",
+ "saveFailed": "ذخیرهسازی ناموفق بود",
+ "saveSuccess": "ذخیره با موفقیت انجام شد"
+}
diff --git a/apps/admin/locales/fa-IR/telegram.json b/apps/admin/locales/fa-IR/telegram.json
new file mode 100644
index 0000000..b8c5cd5
--- /dev/null
+++ b/apps/admin/locales/fa-IR/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "شناسه ربات",
+ "clientIdDescription": "شناسه ربات تلگرام، میتوانید آن را از @BotFather دریافت کنید",
+ "clientSecret": "توکن ربات",
+ "clientSecretDescription": "توکن ربات تلگرام، میتوانید آن را از @BotFather دریافت کنید",
+ "enable": "فعال کردن",
+ "enableDescription": "پس از فعالسازی، عملکردهای ثبتنام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد",
+ "redirectUri": "آدرس URL هدایت",
+ "redirectUriDescription": "آدرسی که تلگرام پس از احراز هویت موفق به آن هدایت خواهد کرد",
+ "saveFailed": "ذخیرهسازی ناموفق بود",
+ "saveSuccess": "ذخیره با موفقیت انجام شد"
+}
diff --git a/apps/admin/locales/fi-FI/apple.json b/apps/admin/locales/fi-FI/apple.json
new file mode 100644
index 0000000..f76f5b6
--- /dev/null
+++ b/apps/admin/locales/fi-FI/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Palvelun ID",
+ "clientIdDescription": "Apple-palvelutunnus, jonka voit hankkia Apple Developer Portalista",
+ "clientSecret": "Yksityinen avain",
+ "clientSecretDescription": "Yksityinen avain (.p8-tiedosto), jota käytetään todennukseen Applen kanssa",
+ "enable": "Ota käyttöön",
+ "enableDescription": "Kun otat tämän käyttöön, käyttäjät voivat kirjautua sisään Apple ID:llään",
+ "keyId": "Avain ID",
+ "keyIdDescription": "Yksityisen avaimen tunnus Apple Developer -portaalista",
+ "redirectUri": "Paluu-URL",
+ "redirectUriDescription": "URL-osoite, jolle Apple ohjaa onnistuneen todennuksen jälkeen",
+ "saveFailed": "Tallennus epäonnistui",
+ "saveSuccess": "Tallennus onnistui",
+ "teamId": "Tiimin tunnus",
+ "teamIdDescription": "Apple Developer -tiimin tunnus"
+}
diff --git a/apps/admin/locales/fi-FI/facebook.json b/apps/admin/locales/fi-FI/facebook.json
new file mode 100644
index 0000000..6d11eeb
--- /dev/null
+++ b/apps/admin/locales/fi-FI/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Asiakas ID",
+ "clientIdDescription": "Facebook-sovelluksen tunnus Facebookin kehittäjäkonsolista",
+ "clientSecret": "Asiakassalasana",
+ "clientSecretDescription": "Facebook-sovelluksen salaisuus Facebookin kehittäjäkonsolista",
+ "enable": "Ota käyttöön",
+ "enableDescription": "Kun otat tämän käyttöön, käyttäjät voivat kirjautua sisään Facebook-tilillään",
+ "redirectUri": "Valtuutettu uudelleenohjaus-URI",
+ "redirectUriDescription": "URL, jolle käyttäjä ohjataan Facebook-todennuksen jälkeen",
+ "saveFailed": "Tallennus epäonnistui",
+ "saveSuccess": "Tallennus onnistui"
+}
diff --git a/apps/admin/locales/fi-FI/github.json b/apps/admin/locales/fi-FI/github.json
new file mode 100644
index 0000000..825f4f4
--- /dev/null
+++ b/apps/admin/locales/fi-FI/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub-asiakastunnus",
+ "clientIdDescription": "Asiakkaan tunnus GitHub OAuth -sovelluksesi asetuksista",
+ "clientSecret": "GitHub-asiakassalasana",
+ "clientSecretDescription": "Asiakassalasana GitHub OAuth -sovelluksesi asetuksista",
+ "enable": "Ota käyttöön GitHub-autentikointi",
+ "enableDescription": "Salli käyttäjien kirjautua sisään GitHub-tileillään",
+ "redirectUri": "Valtuutuksen paluuosoite",
+ "redirectUriDescription": "Sovelluksesi URL-osoite, johon käyttäjät ohjataan GitHub-todennuksen jälkeen",
+ "saveFailed": "GitHub-asetusten tallentaminen epäonnistui",
+ "saveSuccess": "GitHub-asetukset tallennettu onnistuneesti"
+}
diff --git a/apps/admin/locales/fi-FI/google.json b/apps/admin/locales/fi-FI/google.json
new file mode 100644
index 0000000..a0e1d6f
--- /dev/null
+++ b/apps/admin/locales/fi-FI/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Asiakas ID",
+ "clientIdDescription": "Google OAuth 2.0 -asiakastunnus Google Cloud Consolesta",
+ "clientSecret": "Asiakassalasana",
+ "clientSecretDescription": "Google OAuth 2.0 -asiakassalasana Google Cloud Consolesta",
+ "enable": "Ota käyttöön",
+ "enableDescription": "Kun otat tämän käyttöön, käyttäjät voivat kirjautua sisään Google-tilillään",
+ "redirectUri": "Valtuutettu uudelleenohjaus-URI",
+ "redirectUriDescription": "URL, jolle käyttäjä ohjataan Google-todennuksen jälkeen",
+ "saveFailed": "Tallennus epäonnistui",
+ "saveSuccess": "Tallennus onnistui"
+}
diff --git a/apps/admin/locales/fi-FI/telegram.json b/apps/admin/locales/fi-FI/telegram.json
new file mode 100644
index 0000000..f766e78
--- /dev/null
+++ b/apps/admin/locales/fi-FI/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Botti ID",
+ "clientIdDescription": "Telegram Botin ID, jonka saat @BotFatherilta",
+ "clientSecret": "Bottitunnus",
+ "clientSecretDescription": "Telegram-bottitunnus, jonka voit saada @BotFatherilta",
+ "enable": "Ota käyttöön",
+ "enableDescription": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön",
+ "redirectUri": "Uudelleenohjaus-URL",
+ "redirectUriDescription": "URL, jolle Telegram ohjaa onnistuneen todennuksen jälkeen",
+ "saveFailed": "Tallennus epäonnistui",
+ "saveSuccess": "Tallennus onnistui"
+}
diff --git a/apps/admin/locales/fr-FR/apple.json b/apps/admin/locales/fr-FR/apple.json
new file mode 100644
index 0000000..2180d53
--- /dev/null
+++ b/apps/admin/locales/fr-FR/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID de service",
+ "clientIdDescription": "ID de service Apple, vous pouvez l'obtenir depuis le portail des développeurs Apple",
+ "clientSecret": "Clé Privée",
+ "clientSecretDescription": "Le contenu de la clé privée (fichier .p8) utilisé pour l'authentification avec Apple",
+ "enable": "Activer",
+ "enableDescription": "Après activation, les utilisateurs peuvent se connecter avec leur identifiant Apple",
+ "keyId": "ID de clé",
+ "keyIdDescription": "L'ID de votre clé privée depuis le portail des développeurs Apple",
+ "redirectUri": "URL de retour",
+ "redirectUriDescription": "L'URL vers laquelle Apple redirigera après une authentification réussie",
+ "saveFailed": "Échec de l'enregistrement",
+ "saveSuccess": "Enregistrement réussi",
+ "teamId": "ID de l'équipe",
+ "teamIdDescription": "ID d'équipe du développeur Apple"
+}
diff --git a/apps/admin/locales/fr-FR/facebook.json b/apps/admin/locales/fr-FR/facebook.json
new file mode 100644
index 0000000..c242095
--- /dev/null
+++ b/apps/admin/locales/fr-FR/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID client",
+ "clientIdDescription": "ID de l'application Facebook depuis la console des développeurs Facebook",
+ "clientSecret": "Secret Client",
+ "clientSecretDescription": "Secret de l'application Facebook depuis la console des développeurs Facebook",
+ "enable": "Activer",
+ "enableDescription": "Après activation, les utilisateurs peuvent se connecter avec leur compte Facebook",
+ "redirectUri": "URI de redirection autorisée",
+ "redirectUriDescription": "L'URL vers laquelle l'utilisateur sera redirigé après l'authentification Facebook",
+ "saveFailed": "Échec de l'enregistrement",
+ "saveSuccess": "Enregistrement réussi"
+}
diff --git a/apps/admin/locales/fr-FR/github.json b/apps/admin/locales/fr-FR/github.json
new file mode 100644
index 0000000..3a35962
--- /dev/null
+++ b/apps/admin/locales/fr-FR/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Client GitHub",
+ "clientIdDescription": "L'ID client de vos paramètres d'application OAuth GitHub",
+ "clientSecret": "Secret Client GitHub",
+ "clientSecretDescription": "Le secret client de vos paramètres d'application OAuth GitHub",
+ "enable": "Activer l'authentification GitHub",
+ "enableDescription": "Permettre aux utilisateurs de se connecter avec leurs comptes GitHub",
+ "redirectUri": "URL de rappel d'autorisation",
+ "redirectUriDescription": "L'URL dans votre application où les utilisateurs seront redirigés après l'authentification GitHub",
+ "saveFailed": "Échec de l'enregistrement des paramètres GitHub",
+ "saveSuccess": "Paramètres GitHub enregistrés avec succès"
+}
diff --git a/apps/admin/locales/fr-FR/google.json b/apps/admin/locales/fr-FR/google.json
new file mode 100644
index 0000000..7eb399e
--- /dev/null
+++ b/apps/admin/locales/fr-FR/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Client",
+ "clientIdDescription": "ID client OAuth 2.0 de Google depuis la console Google Cloud",
+ "clientSecret": "Secret Client",
+ "clientSecretDescription": "Secret client OAuth 2.0 de Google depuis la console Google Cloud",
+ "enable": "Activer",
+ "enableDescription": "Après activation, les utilisateurs peuvent se connecter avec leur compte Google",
+ "redirectUri": "URI de redirection autorisée",
+ "redirectUriDescription": "L'URL vers laquelle l'utilisateur sera redirigé après l'authentification Google",
+ "saveFailed": "Échec de l'enregistrement",
+ "saveSuccess": "Enregistrement réussi"
+}
diff --git a/apps/admin/locales/fr-FR/telegram.json b/apps/admin/locales/fr-FR/telegram.json
new file mode 100644
index 0000000..20f026a
--- /dev/null
+++ b/apps/admin/locales/fr-FR/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID du Bot",
+ "clientIdDescription": "ID du bot Telegram, vous pouvez l'obtenir auprès de @BotFather",
+ "clientSecret": "Jeton du Bot",
+ "clientSecretDescription": "Jeton du bot Telegram, vous pouvez l'obtenir auprès de @BotFather",
+ "enable": "Activer",
+ "enableDescription": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de dissociation par téléphone mobile seront activées",
+ "redirectUri": "URL de redirection",
+ "redirectUriDescription": "L'URL vers laquelle Telegram redirigera après une authentification réussie",
+ "saveFailed": "Échec de l'enregistrement",
+ "saveSuccess": "Enregistrement réussi"
+}
diff --git a/apps/admin/locales/hi-IN/apple.json b/apps/admin/locales/hi-IN/apple.json
new file mode 100644
index 0000000..0779b1d
--- /dev/null
+++ b/apps/admin/locales/hi-IN/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "सेवा आईडी",
+ "clientIdDescription": "एप्पल सेवा आईडी, जिसे आप एप्पल डेवलपर पोर्टल से प्राप्त कर सकते हैं",
+ "clientSecret": "निजी कुंजी",
+ "clientSecretDescription": "Apple के साथ प्रमाणीकरण के लिए उपयोग की जाने वाली निजी कुंजी सामग्री (.p8 फ़ाइल)",
+ "enable": "सक्षम करें",
+ "enableDescription": "सक्षम करने के बाद, उपयोगकर्ता अपने Apple ID के साथ साइन इन कर सकते हैं",
+ "keyId": "कुंजी आईडी",
+ "keyIdDescription": "Apple डेवलपर पोर्टल से आपके निजी कुंजी की आईडी",
+ "redirectUri": "वापसी URL",
+ "redirectUriDescription": "सफल प्रमाणीकरण के बाद Apple जिस URL पर पुनः निर्देशित करेगा",
+ "saveFailed": "सहेजना विफल हुआ",
+ "saveSuccess": "सहेजना सफल रहा",
+ "teamId": "टीम आईडी",
+ "teamIdDescription": "एप्पल डेवलपर टीम आईडी"
+}
diff --git a/apps/admin/locales/hi-IN/facebook.json b/apps/admin/locales/hi-IN/facebook.json
new file mode 100644
index 0000000..081f7dd
--- /dev/null
+++ b/apps/admin/locales/hi-IN/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "क्लाइंट आईडी",
+ "clientIdDescription": "फेसबुक डेवलपर्स कंसोल से फेसबुक ऐप आईडी",
+ "clientSecret": "क्लाइंट सीक्रेट",
+ "clientSecretDescription": "फेसबुक डेवलपर्स कंसोल से फेसबुक ऐप सीक्रेट",
+ "enable": "सक्षम करें",
+ "enableDescription": "सक्षम करने के बाद, उपयोगकर्ता अपने फेसबुक खाते से साइन इन कर सकते हैं",
+ "redirectUri": "अधिकृत पुनर्निर्देशन URI",
+ "redirectUriDescription": "फेसबुक प्रमाणीकरण के बाद उपयोगकर्ता को जिस URL पर पुनः निर्देशित किया जाएगा",
+ "saveFailed": "सहेजना विफल हुआ",
+ "saveSuccess": "सहेजा सफल"
+}
diff --git a/apps/admin/locales/hi-IN/github.json b/apps/admin/locales/hi-IN/github.json
new file mode 100644
index 0000000..f97b7a6
--- /dev/null
+++ b/apps/admin/locales/hi-IN/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "गिटहब क्लाइंट आईडी",
+ "clientIdDescription": "आपके GitHub OAuth एप्लिकेशन सेटिंग्स से क्लाइंट आईडी",
+ "clientSecret": "GitHub क्लाइंट सीक्रेट",
+ "clientSecretDescription": "आपके GitHub OAuth एप्लिकेशन सेटिंग्स से क्लाइंट सीक्रेट",
+ "enable": "GitHub प्रमाणीकरण सक्षम करें",
+ "enableDescription": "उपयोगकर्ताओं को उनके GitHub खातों के साथ साइन इन करने की अनुमति दें",
+ "redirectUri": "प्राधिकरण कॉलबैक URL",
+ "redirectUriDescription": "आपके एप्लिकेशन में वह URL जहाँ उपयोगकर्ताओं को GitHub प्रमाणीकरण के बाद पुनः निर्देशित किया जाएगा",
+ "saveFailed": "GitHub सेटिंग्स सहेजने में विफल",
+ "saveSuccess": "GitHub सेटिंग्स सफलतापूर्वक सहेजी गईं"
+}
diff --git a/apps/admin/locales/hi-IN/google.json b/apps/admin/locales/hi-IN/google.json
new file mode 100644
index 0000000..63f1af3
--- /dev/null
+++ b/apps/admin/locales/hi-IN/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "क्लाइंट आईडी",
+ "clientIdDescription": "गूगल क्लाउड कंसोल से गूगल OAuth 2.0 क्लाइंट आईडी",
+ "clientSecret": "क्लाइंट सीक्रेट",
+ "clientSecretDescription": "गूगल क्लाउड कंसोल से गूगल OAuth 2.0 क्लाइंट सीक्रेट",
+ "enable": "सक्षम करें",
+ "enableDescription": "सक्षम करने के बाद, उपयोगकर्ता अपने Google खाते से साइन इन कर सकते हैं",
+ "redirectUri": "अधिकृत पुनर्निर्देशन URI",
+ "redirectUriDescription": "Google प्रमाणीकरण के बाद उपयोगकर्ता को जिस URL पर पुनः निर्देशित किया जाएगा",
+ "saveFailed": "सहेजना विफल हुआ",
+ "saveSuccess": "सहेजना सफल रहा"
+}
diff --git a/apps/admin/locales/hi-IN/telegram.json b/apps/admin/locales/hi-IN/telegram.json
new file mode 100644
index 0000000..4c49208
--- /dev/null
+++ b/apps/admin/locales/hi-IN/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "बॉट आईडी",
+ "clientIdDescription": "टेलीग्राम बॉट आईडी, जिसे आप @BotFather से प्राप्त कर सकते हैं",
+ "clientSecret": "बॉट टोकन",
+ "clientSecretDescription": "टेलीग्राम बॉट टोकन, जिसे आप @BotFather से प्राप्त कर सकते हैं",
+ "enable": "सक्षम करें",
+ "enableDescription": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी",
+ "redirectUri": "पुनर्निर्देशन URL",
+ "redirectUriDescription": "सफल प्रमाणीकरण के बाद टेलीग्राम जिस URL पर पुनः निर्देशित करेगा",
+ "saveFailed": "सहेजना विफल हुआ",
+ "saveSuccess": "सहेजा सफल"
+}
diff --git a/apps/admin/locales/hu-HU/apple.json b/apps/admin/locales/hu-HU/apple.json
new file mode 100644
index 0000000..9180275
--- /dev/null
+++ b/apps/admin/locales/hu-HU/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Szolgáltatás azonosító",
+ "clientIdDescription": "Apple Szolgáltatásazonosító, amelyet az Apple Fejlesztői Portálról szerezhet be",
+ "clientSecret": "Privát kulcs",
+ "clientSecretDescription": "A privát kulcs tartalma (.p8 fájl), amelyet az Apple-lel való hitelesítéshez használnak",
+ "enable": "Engedélyez",
+ "enableDescription": "Bekapcsolás után a felhasználók bejelentkezhetnek az Apple ID-jukkal",
+ "keyId": "Kulcsazonosító",
+ "keyIdDescription": "Az Apple Fejlesztői Portálon található privát kulcs azonosítója",
+ "redirectUri": "Visszatérési URL",
+ "redirectUriDescription": "Az URL, amelyre az Apple sikeres hitelesítés után átirányít",
+ "saveFailed": "Mentés sikertelen",
+ "saveSuccess": "Sikeres mentés",
+ "teamId": "Csapat azonosító",
+ "teamIdDescription": "Apple Fejlesztői Csapatazonosító"
+}
diff --git a/apps/admin/locales/hu-HU/facebook.json b/apps/admin/locales/hu-HU/facebook.json
new file mode 100644
index 0000000..c21eef8
--- /dev/null
+++ b/apps/admin/locales/hu-HU/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ügyfélazonosító",
+ "clientIdDescription": "Facebook alkalmazásazonosító a Facebook Fejlesztői Konzolból",
+ "clientSecret": "Ügyfél titok",
+ "clientSecretDescription": "Facebook alkalmazás titok a Facebook Fejlesztői Konzolból",
+ "enable": "Engedélyez",
+ "enableDescription": "A bekapcsolás után a felhasználók bejelentkezhetnek a Facebook-fiókjukkal",
+ "redirectUri": "Engedélyezett átirányítási URI",
+ "redirectUriDescription": "Az URL, ahová a felhasználó a Facebook-hitelesítés után átirányításra kerül",
+ "saveFailed": "Mentés sikertelen",
+ "saveSuccess": "Sikeres mentés"
+}
diff --git a/apps/admin/locales/hu-HU/github.json b/apps/admin/locales/hu-HU/github.json
new file mode 100644
index 0000000..50324a5
--- /dev/null
+++ b/apps/admin/locales/hu-HU/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub kliensazonosító",
+ "clientIdDescription": "Az ügyfélazonosító a GitHub OAuth alkalmazás beállításaiból",
+ "clientSecret": "GitHub kliens titok",
+ "clientSecretDescription": "A kliens titkos kulcsa a GitHub OAuth alkalmazás beállításaiból",
+ "enable": "GitHub-hitelesítés engedélyezése",
+ "enableDescription": "Engedélyezze a felhasználóknak, hogy GitHub fiókjukkal jelentkezzenek be",
+ "redirectUri": "Engedélyezési visszahívási URL",
+ "redirectUriDescription": "Az URL az alkalmazásában, ahová a felhasználók a GitHub-hitelesítés után lesznek átirányítva",
+ "saveFailed": "Nem sikerült menteni a GitHub beállításokat",
+ "saveSuccess": "A GitHub beállítások sikeresen mentve"
+}
diff --git a/apps/admin/locales/hu-HU/google.json b/apps/admin/locales/hu-HU/google.json
new file mode 100644
index 0000000..c34d301
--- /dev/null
+++ b/apps/admin/locales/hu-HU/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ügyfélazonosító",
+ "clientIdDescription": "Google OAuth 2.0 ügyfélazonosító a Google Cloud Console-ból",
+ "clientSecret": "Ügyfél titok",
+ "clientSecretDescription": "Google OAuth 2.0 kliens titok a Google Cloud Console-ból",
+ "enable": "Engedélyez",
+ "enableDescription": "A bekapcsolás után a felhasználók bejelentkezhetnek a Google-fiókjukkal",
+ "redirectUri": "Engedélyezett átirányítási URI",
+ "redirectUriDescription": "Az URL, ahová a felhasználó a Google-hitelesítés után átirányításra kerül",
+ "saveFailed": "Mentés sikertelen",
+ "saveSuccess": "Sikeres mentés"
+}
diff --git a/apps/admin/locales/hu-HU/telegram.json b/apps/admin/locales/hu-HU/telegram.json
new file mode 100644
index 0000000..8ab427b
--- /dev/null
+++ b/apps/admin/locales/hu-HU/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Bot azonosító",
+ "clientIdDescription": "Telegram Bot azonosító, amelyet a @BotFather-től szerezhetsz meg",
+ "clientSecret": "Bot Token",
+ "clientSecretDescription": "Telegram Bot Token, amelyet a @BotFather-től szerezhetsz be",
+ "enable": "Engedélyez",
+ "enableDescription": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak",
+ "redirectUri": "Átirányítási URL",
+ "redirectUriDescription": "Az URL, amelyre a Telegram sikeres hitelesítés után átirányít",
+ "saveFailed": "Mentés sikertelen",
+ "saveSuccess": "Sikeres mentés"
+}
diff --git a/apps/admin/locales/ja-JP/apple.json b/apps/admin/locales/ja-JP/apple.json
new file mode 100644
index 0000000..0862fcf
--- /dev/null
+++ b/apps/admin/locales/ja-JP/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "サービスID",
+ "clientIdDescription": "AppleサービスID。Apple Developer Portalから取得できます。",
+ "clientSecret": "プライベートキー",
+ "clientSecretDescription": "Appleとの認証に使用される秘密鍵コンテンツ(.p8ファイル)",
+ "enable": "有効にする",
+ "enableDescription": "有効にすると、ユーザーはApple IDでサインインできます",
+ "keyId": "キーID",
+ "keyIdDescription": "Apple Developer PortalからのプライベートキーのID",
+ "redirectUri": "リダイレクトURL",
+ "redirectUriDescription": "認証が成功した後にAppleがリダイレクトするURL",
+ "saveFailed": "保存に失敗しました",
+ "saveSuccess": "保存に成功しました",
+ "teamId": "チームID",
+ "teamIdDescription": "Apple Developer チーム ID"
+}
diff --git a/apps/admin/locales/ja-JP/facebook.json b/apps/admin/locales/ja-JP/facebook.json
new file mode 100644
index 0000000..3a55837
--- /dev/null
+++ b/apps/admin/locales/ja-JP/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "クライアントID",
+ "clientIdDescription": "Facebook開発者コンソールからのFacebookアプリID",
+ "clientSecret": "クライアントシークレット",
+ "clientSecretDescription": "Facebook開発者コンソールからのFacebookアプリシークレット",
+ "enable": "有効にする",
+ "enableDescription": "有効にすると、ユーザーはFacebookアカウントでサインインできます",
+ "redirectUri": "認可されたリダイレクトURI",
+ "redirectUriDescription": "Facebook認証後にユーザーがリダイレクトされるURL",
+ "saveFailed": "保存に失敗しました",
+ "saveSuccess": "保存に成功しました"
+}
diff --git a/apps/admin/locales/ja-JP/github.json b/apps/admin/locales/ja-JP/github.json
new file mode 100644
index 0000000..cbe8d93
--- /dev/null
+++ b/apps/admin/locales/ja-JP/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub クライアント ID",
+ "clientIdDescription": "GitHub OAuthアプリケーション設定からのクライアントID",
+ "clientSecret": "GitHub クライアントシークレット",
+ "clientSecretDescription": "GitHub OAuthアプリケーション設定からのクライアントシークレット",
+ "enable": "GitHub認証を有効にする",
+ "enableDescription": "ユーザーがGitHubアカウントでサインインできるようにする",
+ "redirectUri": "認証コールバックURL",
+ "redirectUriDescription": "GitHub認証後にユーザーがリダイレクトされるアプリケーション内のURL",
+ "saveFailed": "GitHub設定の保存に失敗しました",
+ "saveSuccess": "GitHubの設定が正常に保存されました"
+}
diff --git a/apps/admin/locales/ja-JP/google.json b/apps/admin/locales/ja-JP/google.json
new file mode 100644
index 0000000..767c9f4
--- /dev/null
+++ b/apps/admin/locales/ja-JP/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "クライアントID",
+ "clientIdDescription": "Google Cloud ConsoleからのGoogle OAuth 2.0クライアントID",
+ "clientSecret": "クライアントシークレット",
+ "clientSecretDescription": "Google Cloud ConsoleからのGoogle OAuth 2.0クライアントシークレット",
+ "enable": "有効にする",
+ "enableDescription": "有効にすると、ユーザーはGoogleアカウントでサインインできます",
+ "redirectUri": "認可されたリダイレクトURI",
+ "redirectUriDescription": "Google認証後にユーザーがリダイレクトされるURL",
+ "saveFailed": "保存に失敗しました",
+ "saveSuccess": "保存に成功しました"
+}
diff --git a/apps/admin/locales/ja-JP/telegram.json b/apps/admin/locales/ja-JP/telegram.json
new file mode 100644
index 0000000..baab2c2
--- /dev/null
+++ b/apps/admin/locales/ja-JP/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ボットID",
+ "clientIdDescription": "TelegramボットID、@BotFatherから取得できます",
+ "clientSecret": "ボットトークン",
+ "clientSecretDescription": "Telegramボットトークンは、@BotFatherから取得できます。",
+ "enable": "有効にする",
+ "enableDescription": "有効化すると、携帯電話の登録、ログイン、バインディング、バインディング解除の機能が有効になります",
+ "redirectUri": "リダイレクトURL",
+ "redirectUriDescription": "認証が成功した後にTelegramがリダイレクトするURL",
+ "saveFailed": "保存に失敗しました",
+ "saveSuccess": "保存に成功しました"
+}
diff --git a/apps/admin/locales/ko-KR/apple.json b/apps/admin/locales/ko-KR/apple.json
new file mode 100644
index 0000000..561e42c
--- /dev/null
+++ b/apps/admin/locales/ko-KR/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "서비스 ID",
+ "clientIdDescription": "Apple 서비스 ID, Apple 개발자 포털에서 얻을 수 있습니다",
+ "clientSecret": "비밀 키",
+ "clientSecretDescription": "Apple과의 인증에 사용되는 비공개 키 내용(.p8 파일)",
+ "enable": "활성화",
+ "enableDescription": "활성화 후 사용자는 Apple ID로 로그인할 수 있습니다",
+ "keyId": "키 ID",
+ "keyIdDescription": "Apple 개발자 포털에서의 개인 키 ID",
+ "redirectUri": "반환 URL",
+ "redirectUriDescription": "Apple이 인증에 성공한 후 리디렉션할 URL",
+ "saveFailed": "저장 실패",
+ "saveSuccess": "저장 성공",
+ "teamId": "팀 ID",
+ "teamIdDescription": "Apple 개발자 팀 ID"
+}
diff --git a/apps/admin/locales/ko-KR/facebook.json b/apps/admin/locales/ko-KR/facebook.json
new file mode 100644
index 0000000..cd86934
--- /dev/null
+++ b/apps/admin/locales/ko-KR/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "클라이언트 ID",
+ "clientIdDescription": "Facebook 개발자 콘솔에서 제공하는 Facebook 앱 ID",
+ "clientSecret": "클라이언트 비밀",
+ "clientSecretDescription": "Facebook 개발자 콘솔에서 가져온 Facebook 앱 비밀키",
+ "enable": "활성화",
+ "enableDescription": "활성화 후 사용자는 Facebook 계정으로 로그인할 수 있습니다",
+ "redirectUri": "인가된 리디렉션 URI",
+ "redirectUriDescription": "사용자가 Facebook 인증 후 리디렉션될 URL",
+ "saveFailed": "저장 실패",
+ "saveSuccess": "저장 성공"
+}
diff --git a/apps/admin/locales/ko-KR/github.json b/apps/admin/locales/ko-KR/github.json
new file mode 100644
index 0000000..cd9c765
--- /dev/null
+++ b/apps/admin/locales/ko-KR/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub 클라이언트 ID",
+ "clientIdDescription": "GitHub OAuth 애플리케이션 설정에서의 클라이언트 ID",
+ "clientSecret": "GitHub 클라이언트 비밀",
+ "clientSecretDescription": "GitHub OAuth 애플리케이션 설정에서 가져온 클라이언트 비밀",
+ "enable": "GitHub 인증 활성화",
+ "enableDescription": "사용자가 GitHub 계정으로 로그인할 수 있도록 허용",
+ "redirectUri": "인증 콜백 URL",
+ "redirectUriDescription": "GitHub 인증 후 사용자가 리디렉션될 애플리케이션의 URL",
+ "saveFailed": "GitHub 설정 저장에 실패했습니다",
+ "saveSuccess": "GitHub 설정이 성공적으로 저장되었습니다"
+}
diff --git a/apps/admin/locales/ko-KR/google.json b/apps/admin/locales/ko-KR/google.json
new file mode 100644
index 0000000..2a55f74
--- /dev/null
+++ b/apps/admin/locales/ko-KR/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "클라이언트 ID",
+ "clientIdDescription": "Google Cloud Console에서 가져온 Google OAuth 2.0 클라이언트 ID",
+ "clientSecret": "클라이언트 비밀",
+ "clientSecretDescription": "Google Cloud Console에서 가져온 Google OAuth 2.0 클라이언트 비밀",
+ "enable": "활성화",
+ "enableDescription": "활성화 후 사용자는 Google 계정으로 로그인할 수 있습니다",
+ "redirectUri": "인가된 리디렉션 URI",
+ "redirectUriDescription": "Google 인증 후 사용자가 리디렉션될 URL",
+ "saveFailed": "저장 실패",
+ "saveSuccess": "저장 성공"
+}
diff --git a/apps/admin/locales/ko-KR/telegram.json b/apps/admin/locales/ko-KR/telegram.json
new file mode 100644
index 0000000..aec3adc
--- /dev/null
+++ b/apps/admin/locales/ko-KR/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "봇 ID",
+ "clientIdDescription": "텔레그램 봇 ID, @BotFather에서 얻을 수 있습니다.",
+ "clientSecret": "봇 토큰",
+ "clientSecretDescription": "텔레그램 봇 토큰, @BotFather에서 받을 수 있습니다.",
+ "enable": "사용",
+ "enableDescription": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다",
+ "redirectUri": "리디렉션 URL",
+ "redirectUriDescription": "성공적인 인증 후 Telegram이 리디렉션할 URL",
+ "saveFailed": "저장 실패",
+ "saveSuccess": "저장 성공"
+}
diff --git a/apps/admin/locales/no-NO/apple.json b/apps/admin/locales/no-NO/apple.json
new file mode 100644
index 0000000..b452610
--- /dev/null
+++ b/apps/admin/locales/no-NO/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Tjeneste-ID",
+ "clientIdDescription": "Apple-tjeneste-ID, du kan få den fra Apple Developer Portal",
+ "clientSecret": "Privat Nøkkel",
+ "clientSecretDescription": "Innholdet i den private nøkkelen (.p8-fil) brukt for autentisering med Apple",
+ "enable": "Aktiver",
+ "enableDescription": "Etter aktivering kan brukere logge inn med sin Apple-ID",
+ "keyId": "Nøkkel-ID",
+ "keyIdDescription": "ID-en til din private nøkkel fra Apple Developer Portal",
+ "redirectUri": "Retur-URL",
+ "redirectUriDescription": "URL-en som Apple vil omdirigere til etter vellykket autentisering",
+ "saveFailed": "Lagring mislyktes",
+ "saveSuccess": "Lagring vellykket",
+ "teamId": "Team-ID",
+ "teamIdDescription": "Apple Developer Team-ID"
+}
diff --git a/apps/admin/locales/no-NO/facebook.json b/apps/admin/locales/no-NO/facebook.json
new file mode 100644
index 0000000..b356bbd
--- /dev/null
+++ b/apps/admin/locales/no-NO/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Klient-ID",
+ "clientIdDescription": "Facebook App-ID fra Facebook Developers Console",
+ "clientSecret": "Klienthemmelighet",
+ "clientSecretDescription": "Facebook App-hemmelighet fra Facebook Developers Console",
+ "enable": "Aktiver",
+ "enableDescription": "Etter aktivering kan brukere logge inn med sin Facebook-konto",
+ "redirectUri": "Autorisert omdirigerings-URI",
+ "redirectUriDescription": "URL-en som brukeren vil bli omdirigert til etter Facebook-autentisering",
+ "saveFailed": "Lagring mislyktes",
+ "saveSuccess": "Lagring vellykket"
+}
diff --git a/apps/admin/locales/no-NO/github.json b/apps/admin/locales/no-NO/github.json
new file mode 100644
index 0000000..7d2f62b
--- /dev/null
+++ b/apps/admin/locales/no-NO/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub Klient-ID",
+ "clientIdDescription": "Klient-ID-en fra innstillingene for din GitHub OAuth-applikasjon",
+ "clientSecret": "GitHub-klienthemmelighet",
+ "clientSecretDescription": "Klienthemmeligheten fra innstillingene for din GitHub OAuth-applikasjon",
+ "enable": "Aktiver GitHub-autentisering",
+ "enableDescription": "Tillat brukere å logge inn med sine GitHub-kontoer",
+ "redirectUri": "Autorisasjons tilbakeringings-URL",
+ "redirectUriDescription": "URL-en i applikasjonen din hvor brukere vil bli omdirigert etter GitHub-autentisering",
+ "saveFailed": "Kunne ikke lagre GitHub-innstillinger",
+ "saveSuccess": "GitHub-innstillinger lagret vellykket"
+}
diff --git a/apps/admin/locales/no-NO/google.json b/apps/admin/locales/no-NO/google.json
new file mode 100644
index 0000000..03cd54e
--- /dev/null
+++ b/apps/admin/locales/no-NO/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Klient-ID",
+ "clientIdDescription": "Google OAuth 2.0 Klient-ID fra Google Cloud Console",
+ "clientSecret": "Klienthemmelighet",
+ "clientSecretDescription": "Google OAuth 2.0-klienthemmelighet fra Google Cloud Console",
+ "enable": "Aktiver",
+ "enableDescription": "Etter aktivering kan brukere logge inn med sin Google-konto",
+ "redirectUri": "Autorisert omdirigerings-URI",
+ "redirectUriDescription": "URL-en som brukeren vil bli omdirigert til etter Google-autentisering",
+ "saveFailed": "Lagring mislyktes",
+ "saveSuccess": "Lagring vellykket"
+}
diff --git a/apps/admin/locales/no-NO/telegram.json b/apps/admin/locales/no-NO/telegram.json
new file mode 100644
index 0000000..8dd835c
--- /dev/null
+++ b/apps/admin/locales/no-NO/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Bot-ID",
+ "clientIdDescription": "Telegram Bot-ID, du kan få den fra @BotFather",
+ "clientSecret": "Bot-token",
+ "clientSecretDescription": "Telegram Bot Token, du kan få den fra @BotFather",
+ "enable": "Aktiver",
+ "enableDescription": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert",
+ "redirectUri": "Omdirigerings-URL",
+ "redirectUriDescription": "URL-en som Telegram vil omdirigere til etter vellykket autentisering",
+ "saveFailed": "Lagring mislyktes",
+ "saveSuccess": "Lagring vellykket"
+}
diff --git a/apps/admin/locales/pl-PL/apple.json b/apps/admin/locales/pl-PL/apple.json
new file mode 100644
index 0000000..d7080fb
--- /dev/null
+++ b/apps/admin/locales/pl-PL/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Identyfikator usługi",
+ "clientIdDescription": "Identyfikator usługi Apple, który można uzyskać z Apple Developer Portal",
+ "clientSecret": "Klucz prywatny",
+ "clientSecretDescription": "Treść klucza prywatnego (plik .p8) używana do uwierzytelniania z Apple",
+ "enable": "Włącz",
+ "enableDescription": "Po włączeniu użytkownicy mogą logować się za pomocą swojego Apple ID",
+ "keyId": "Identyfikator klucza",
+ "keyIdDescription": "Identyfikator Twojego klucza prywatnego z Apple Developer Portal",
+ "redirectUri": "URL powrotu",
+ "redirectUriDescription": "URL, na który Apple przekieruje po pomyślnej autoryzacji",
+ "saveFailed": "Zapis nie powiódł się",
+ "saveSuccess": "Zapisano pomyślnie",
+ "teamId": "Identyfikator zespołu",
+ "teamIdDescription": "Identyfikator zespołu deweloperskiego Apple"
+}
diff --git a/apps/admin/locales/pl-PL/facebook.json b/apps/admin/locales/pl-PL/facebook.json
new file mode 100644
index 0000000..2acc02c
--- /dev/null
+++ b/apps/admin/locales/pl-PL/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Identyfikator klienta",
+ "clientIdDescription": "Identyfikator aplikacji Facebook z konsoli deweloperów Facebooka",
+ "clientSecret": "Sekret klienta",
+ "clientSecretDescription": "Sekret aplikacji Facebook z konsoli deweloperów Facebooka",
+ "enable": "Włącz",
+ "enableDescription": "Po włączeniu użytkownicy mogą logować się za pomocą swojego konta na Facebooku",
+ "redirectUri": "Autoryzowany URI przekierowania",
+ "redirectUriDescription": "URL, na który użytkownik zostanie przekierowany po uwierzytelnieniu na Facebooku",
+ "saveFailed": "Nie udało się zapisać",
+ "saveSuccess": "Zapisano pomyślnie"
+}
diff --git a/apps/admin/locales/pl-PL/github.json b/apps/admin/locales/pl-PL/github.json
new file mode 100644
index 0000000..9cbd0bf
--- /dev/null
+++ b/apps/admin/locales/pl-PL/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Identyfikator klienta GitHub",
+ "clientIdDescription": "Identyfikator klienta z ustawień aplikacji OAuth na GitHubie",
+ "clientSecret": "Sekret klienta GitHub",
+ "clientSecretDescription": "Tajny klucz klienta z ustawień aplikacji OAuth na GitHubie",
+ "enable": "Włącz uwierzytelnianie GitHub",
+ "enableDescription": "Pozwól użytkownikom logować się za pomocą ich kont GitHub",
+ "redirectUri": "URL przekierowania autoryzacji",
+ "redirectUriDescription": "Adres URL w Twojej aplikacji, na który użytkownicy zostaną przekierowani po uwierzytelnieniu przez GitHub",
+ "saveFailed": "Nie udało się zapisać ustawień GitHub",
+ "saveSuccess": "Ustawienia GitHub zostały pomyślnie zapisane"
+}
diff --git a/apps/admin/locales/pl-PL/google.json b/apps/admin/locales/pl-PL/google.json
new file mode 100644
index 0000000..64a74d6
--- /dev/null
+++ b/apps/admin/locales/pl-PL/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Identyfikator klienta",
+ "clientIdDescription": "Identyfikator klienta Google OAuth 2.0 z konsoli Google Cloud",
+ "clientSecret": "Sekret klienta",
+ "clientSecretDescription": "Tajny klucz klienta Google OAuth 2.0 z konsoli Google Cloud",
+ "enable": "Włącz",
+ "enableDescription": "Po włączeniu użytkownicy mogą logować się za pomocą swojego konta Google",
+ "redirectUri": "Autoryzowany URI przekierowania",
+ "redirectUriDescription": "URL, na który użytkownik zostanie przekierowany po uwierzytelnieniu przez Google",
+ "saveFailed": "Nie udało się zapisać",
+ "saveSuccess": "Zapisano pomyślnie"
+}
diff --git a/apps/admin/locales/pl-PL/telegram.json b/apps/admin/locales/pl-PL/telegram.json
new file mode 100644
index 0000000..bbd51be
--- /dev/null
+++ b/apps/admin/locales/pl-PL/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID bota",
+ "clientIdDescription": "ID bota Telegram, możesz go uzyskać od @BotFather",
+ "clientSecret": "Token Bota",
+ "clientSecretDescription": "Token bota Telegram, który możesz uzyskać od @BotFather",
+ "enable": "Włącz",
+ "enableDescription": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, powiązania i odwiązania telefonu komórkowego",
+ "redirectUri": "Przekieruj URL",
+ "redirectUriDescription": "URL, na który Telegram przekieruje po pomyślnej autoryzacji",
+ "saveFailed": "Nie udało się zapisać",
+ "saveSuccess": "Zapisano pomyślnie"
+}
diff --git a/apps/admin/locales/pt-BR/apple.json b/apps/admin/locales/pt-BR/apple.json
new file mode 100644
index 0000000..c0ad90b
--- /dev/null
+++ b/apps/admin/locales/pt-BR/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID do Serviço",
+ "clientIdDescription": "ID de Serviço da Apple, você pode obtê-lo no Portal de Desenvolvedores da Apple",
+ "clientSecret": "Chave Privada",
+ "clientSecretDescription": "O conteúdo da chave privada (arquivo .p8) usado para autenticação com a Apple",
+ "enable": "Habilitar",
+ "enableDescription": "Após habilitar, os usuários podem fazer login com seu ID Apple",
+ "keyId": "ID da Chave",
+ "keyIdDescription": "O ID da sua chave privada no Apple Developer Portal",
+ "redirectUri": "URL de Retorno",
+ "redirectUriDescription": "A URL para a qual a Apple redirecionará após a autenticação bem-sucedida",
+ "saveFailed": "Falha ao salvar",
+ "saveSuccess": "Salvo com sucesso",
+ "teamId": "ID da Equipe",
+ "teamIdDescription": "ID da Equipe de Desenvolvedores da Apple"
+}
diff --git a/apps/admin/locales/pt-BR/facebook.json b/apps/admin/locales/pt-BR/facebook.json
new file mode 100644
index 0000000..a0dfba2
--- /dev/null
+++ b/apps/admin/locales/pt-BR/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID do Cliente",
+ "clientIdDescription": "ID do aplicativo do Facebook no Console de Desenvolvedores do Facebook",
+ "clientSecret": "Segredo do Cliente",
+ "clientSecretDescription": "Segredo do aplicativo do Facebook no Console de Desenvolvedores do Facebook",
+ "enable": "Habilitar",
+ "enableDescription": "Após habilitar, os usuários podem fazer login com sua conta do Facebook",
+ "redirectUri": "URI de redirecionamento autorizado",
+ "redirectUriDescription": "A URL para a qual o usuário será redirecionado após a autenticação no Facebook",
+ "saveFailed": "Falha ao salvar",
+ "saveSuccess": "Salvo com sucesso"
+}
diff --git a/apps/admin/locales/pt-BR/github.json b/apps/admin/locales/pt-BR/github.json
new file mode 100644
index 0000000..a388184
--- /dev/null
+++ b/apps/admin/locales/pt-BR/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID do Cliente do GitHub",
+ "clientIdDescription": "O ID do cliente nas configurações do aplicativo OAuth do GitHub",
+ "clientSecret": "Segredo do Cliente do GitHub",
+ "clientSecretDescription": "O segredo do cliente das configurações do aplicativo OAuth do seu GitHub",
+ "enable": "Ativar Autenticação do GitHub",
+ "enableDescription": "Permitir que os usuários façam login com suas contas do GitHub",
+ "redirectUri": "URL de retorno de autorização",
+ "redirectUriDescription": "A URL no seu aplicativo para onde os usuários serão redirecionados após a autenticação no GitHub",
+ "saveFailed": "Falha ao salvar as configurações do GitHub",
+ "saveSuccess": "Configurações do GitHub salvas com sucesso"
+}
diff --git a/apps/admin/locales/pt-BR/google.json b/apps/admin/locales/pt-BR/google.json
new file mode 100644
index 0000000..0513ade
--- /dev/null
+++ b/apps/admin/locales/pt-BR/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID do Cliente",
+ "clientIdDescription": "ID do Cliente OAuth 2.0 do Google no Console do Google Cloud",
+ "clientSecret": "Segredo do Cliente",
+ "clientSecretDescription": "Segredo do Cliente OAuth 2.0 do Google a partir do Console do Google Cloud",
+ "enable": "Habilitar",
+ "enableDescription": "Após habilitar, os usuários podem fazer login com sua conta do Google",
+ "redirectUri": "URI de redirecionamento autorizado",
+ "redirectUriDescription": "A URL para a qual o usuário será redirecionado após a autenticação do Google",
+ "saveFailed": "Falha ao salvar",
+ "saveSuccess": "Salvo com sucesso"
+}
diff --git a/apps/admin/locales/pt-BR/telegram.json b/apps/admin/locales/pt-BR/telegram.json
new file mode 100644
index 0000000..f7693af
--- /dev/null
+++ b/apps/admin/locales/pt-BR/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID do Bot",
+ "clientIdDescription": "ID do Bot do Telegram, você pode obtê-lo com o @BotFather",
+ "clientSecret": "Token do Bot",
+ "clientSecretDescription": "Token do Bot do Telegram, você pode obtê-lo com o @BotFather",
+ "enable": "Habilitar",
+ "enableDescription": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas",
+ "redirectUri": "URL de Redirecionamento",
+ "redirectUriDescription": "A URL para a qual o Telegram redirecionará após a autenticação bem-sucedida",
+ "saveFailed": "Falha ao salvar",
+ "saveSuccess": "Salvo com sucesso"
+}
diff --git a/apps/admin/locales/request.ts b/apps/admin/locales/request.ts
index 73d75f6..4ae8fa5 100644
--- a/apps/admin/locales/request.ts
+++ b/apps/admin/locales/request.ts
@@ -18,6 +18,11 @@ export default getRequestConfig(async () => {
'auth-control': (await import(`./${locale}/auth-control.json`)).default,
'email': (await import(`./${locale}/email.json`)).default,
'phone': (await import(`./${locale}/phone.json`)).default,
+ 'telegram': (await import(`./${locale}/telegram.json`)).default,
+ 'apple': (await import(`./${locale}/apple.json`)).default,
+ 'google': (await import(`./${locale}/google.json`)).default,
+ 'facebook': (await import(`./${locale}/facebook.json`)).default,
+ 'github': (await import(`./${locale}/github.json`)).default,
'payment': (await import(`./${locale}/payment.json`)).default,
'server': (await import(`./${locale}/server.json`)).default,
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
diff --git a/apps/admin/locales/ro-RO/apple.json b/apps/admin/locales/ro-RO/apple.json
new file mode 100644
index 0000000..4d0a82e
--- /dev/null
+++ b/apps/admin/locales/ro-RO/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID Serviciu",
+ "clientIdDescription": "ID-ul de serviciu Apple, îl puteți obține de pe Portalul pentru Dezvoltatori Apple",
+ "clientSecret": "Cheie Privată",
+ "clientSecretDescription": "Conținutul cheii private (fișier .p8) utilizat pentru autentificarea cu Apple",
+ "enable": "Activează",
+ "enableDescription": "După activare, utilizatorii se pot autentifica cu ID-ul lor Apple",
+ "keyId": "ID cheie",
+ "keyIdDescription": "ID-ul cheii tale private din Portalul Dezvoltatorului Apple",
+ "redirectUri": "URL de întoarcere",
+ "redirectUriDescription": "URL-ul la care Apple va redirecționa după autentificarea cu succes",
+ "saveFailed": "Salvarea a eșuat",
+ "saveSuccess": "Salvare reușită",
+ "teamId": "ID echipă",
+ "teamIdDescription": "ID echipă Apple Developer"
+}
diff --git a/apps/admin/locales/ro-RO/facebook.json b/apps/admin/locales/ro-RO/facebook.json
new file mode 100644
index 0000000..a703abc
--- /dev/null
+++ b/apps/admin/locales/ro-RO/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Client",
+ "clientIdDescription": "ID-ul aplicației Facebook din Consola pentru Dezvoltatori Facebook",
+ "clientSecret": "Secretul Clientului",
+ "clientSecretDescription": "Secretul aplicației Facebook din Consola pentru Dezvoltatori Facebook",
+ "enable": "Activează",
+ "enableDescription": "După activare, utilizatorii se pot autentifica cu contul lor de Facebook",
+ "redirectUri": "URI de redirecționare autorizat",
+ "redirectUriDescription": "URL-ul către care utilizatorul va fi redirecționat după autentificarea pe Facebook",
+ "saveFailed": "Salvarea a eșuat",
+ "saveSuccess": "Salvare reușită"
+}
diff --git a/apps/admin/locales/ro-RO/github.json b/apps/admin/locales/ro-RO/github.json
new file mode 100644
index 0000000..a320ca3
--- /dev/null
+++ b/apps/admin/locales/ro-RO/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Client GitHub",
+ "clientIdDescription": "ID-ul clientului din setările aplicației tale OAuth de pe GitHub",
+ "clientSecret": "Secretul Clientului GitHub",
+ "clientSecretDescription": "Secretul clientului din setările aplicației tale GitHub OAuth",
+ "enable": "Activează autentificarea GitHub",
+ "enableDescription": "Permite utilizatorilor să se autentifice cu conturile lor GitHub",
+ "redirectUri": "URL de redirecționare pentru autorizare",
+ "redirectUriDescription": "URL-ul din aplicația dumneavoastră unde utilizatorii vor fi redirecționați după autentificarea pe GitHub",
+ "saveFailed": "Nu s-a reușit salvarea setărilor GitHub",
+ "saveSuccess": "Setările GitHub au fost salvate cu succes"
+}
diff --git a/apps/admin/locales/ro-RO/google.json b/apps/admin/locales/ro-RO/google.json
new file mode 100644
index 0000000..2dd7a4f
--- /dev/null
+++ b/apps/admin/locales/ro-RO/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Client",
+ "clientIdDescription": "ID client Google OAuth 2.0 din Google Cloud Console",
+ "clientSecret": "Secretul Clientului",
+ "clientSecretDescription": "Secretul clientului Google OAuth 2.0 din Consola Google Cloud",
+ "enable": "Activează",
+ "enableDescription": "După activare, utilizatorii se pot autentifica cu contul lor Google",
+ "redirectUri": "URI de redirecționare autorizat",
+ "redirectUriDescription": "URL-ul către care utilizatorul va fi redirecționat după autentificarea Google",
+ "saveFailed": "Salvarea a eșuat",
+ "saveSuccess": "Salvare reușită"
+}
diff --git a/apps/admin/locales/ro-RO/telegram.json b/apps/admin/locales/ro-RO/telegram.json
new file mode 100644
index 0000000..6be2ddd
--- /dev/null
+++ b/apps/admin/locales/ro-RO/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Bot",
+ "clientIdDescription": "ID-ul Botului Telegram, pe care îl poți obține de la @BotFather",
+ "clientSecret": "Token Bot",
+ "clientSecretDescription": "Tokenul Bot Telegram, îl puteți obține de la @BotFather",
+ "enable": "Activează",
+ "enableDescription": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate",
+ "redirectUri": "URL de redirecționare",
+ "redirectUriDescription": "URL-ul către care Telegram va redirecționa după autentificarea cu succes",
+ "saveFailed": "Salvarea a eșuat",
+ "saveSuccess": "Salvare reușită"
+}
diff --git a/apps/admin/locales/ru-RU/apple.json b/apps/admin/locales/ru-RU/apple.json
new file mode 100644
index 0000000..5f0faae
--- /dev/null
+++ b/apps/admin/locales/ru-RU/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Идентификатор услуги",
+ "clientIdDescription": "Apple Service ID, вы можете получить его на портале разработчиков Apple",
+ "clientSecret": "Приватный ключ",
+ "clientSecretDescription": "Содержимое закрытого ключа (.p8 файл), используемого для аутентификации с Apple",
+ "enable": "Включить",
+ "enableDescription": "После включения пользователи смогут входить с помощью своего Apple ID",
+ "keyId": "Идентификатор ключа",
+ "keyIdDescription": "Идентификатор вашего закрытого ключа из Apple Developer Portal",
+ "redirectUri": "URL возврата",
+ "redirectUriDescription": "URL, на который Apple перенаправит после успешной аутентификации",
+ "saveFailed": "Не удалось сохранить",
+ "saveSuccess": "Сохранение успешно",
+ "teamId": "ID команды",
+ "teamIdDescription": "Идентификатор команды разработчиков Apple"
+}
diff --git a/apps/admin/locales/ru-RU/facebook.json b/apps/admin/locales/ru-RU/facebook.json
new file mode 100644
index 0000000..109e659
--- /dev/null
+++ b/apps/admin/locales/ru-RU/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID клиента",
+ "clientIdDescription": "ID приложения Facebook из консоли разработчиков Facebook",
+ "clientSecret": "Секрет клиента",
+ "clientSecretDescription": "Секрет приложения Facebook из консоли разработчиков Facebook",
+ "enable": "Включить",
+ "enableDescription": "После включения пользователи смогут входить в систему с помощью своей учетной записи Facebook",
+ "redirectUri": "Авторизованный URI перенаправления",
+ "redirectUriDescription": "URL, на который пользователь будет перенаправлен после аутентификации через Facebook",
+ "saveFailed": "Не удалось сохранить",
+ "saveSuccess": "Сохранение успешно"
+}
diff --git a/apps/admin/locales/ru-RU/github.json b/apps/admin/locales/ru-RU/github.json
new file mode 100644
index 0000000..c38dcd6
--- /dev/null
+++ b/apps/admin/locales/ru-RU/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Идентификатор клиента GitHub",
+ "clientIdDescription": "Идентификатор клиента из настроек вашего OAuth-приложения на GitHub",
+ "clientSecret": "Секрет клиента GitHub",
+ "clientSecretDescription": "Секрет клиента из настроек вашего OAuth-приложения GitHub",
+ "enable": "Включить аутентификацию через GitHub",
+ "enableDescription": "Разрешить пользователям входить в систему с помощью их учетных записей GitHub",
+ "redirectUri": "URL обратного вызова авторизации",
+ "redirectUriDescription": "URL в вашем приложении, куда пользователи будут перенаправлены после аутентификации через GitHub",
+ "saveFailed": "Не удалось сохранить настройки GitHub",
+ "saveSuccess": "Настройки GitHub успешно сохранены"
+}
diff --git a/apps/admin/locales/ru-RU/google.json b/apps/admin/locales/ru-RU/google.json
new file mode 100644
index 0000000..6ddce89
--- /dev/null
+++ b/apps/admin/locales/ru-RU/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID клиента",
+ "clientIdDescription": "Идентификатор клиента Google OAuth 2.0 из консоли Google Cloud",
+ "clientSecret": "Секрет клиента",
+ "clientSecretDescription": "Секрет клиента Google OAuth 2.0 из консоли Google Cloud",
+ "enable": "Включить",
+ "enableDescription": "После включения пользователи смогут входить в систему с помощью своей учетной записи Google",
+ "redirectUri": "Авторизованный URI перенаправления",
+ "redirectUriDescription": "URL, на который пользователь будет перенаправлен после аутентификации через Google",
+ "saveFailed": "Не удалось сохранить",
+ "saveSuccess": "Сохранение успешно"
+}
diff --git a/apps/admin/locales/ru-RU/telegram.json b/apps/admin/locales/ru-RU/telegram.json
new file mode 100644
index 0000000..f29f221
--- /dev/null
+++ b/apps/admin/locales/ru-RU/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID бота",
+ "clientIdDescription": "ID бота Telegram, вы можете получить его у @BotFather",
+ "clientSecret": "Токен бота",
+ "clientSecretDescription": "Токен бота Telegram, который вы можете получить у @BotFather",
+ "enable": "Включить",
+ "enableDescription": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона",
+ "redirectUri": "URL перенаправления",
+ "redirectUriDescription": "URL, на который Telegram перенаправит после успешной аутентификации",
+ "saveFailed": "Не удалось сохранить",
+ "saveSuccess": "Сохранение успешно"
+}
diff --git a/apps/admin/locales/th-TH/apple.json b/apps/admin/locales/th-TH/apple.json
new file mode 100644
index 0000000..567aaed
--- /dev/null
+++ b/apps/admin/locales/th-TH/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "รหัสบริการ",
+ "clientIdDescription": "Apple Service ID, คุณสามารถรับได้จาก Apple Developer Portal",
+ "clientSecret": "คีย์ส่วนตัว",
+ "clientSecretDescription": "เนื้อหาของคีย์ส่วนตัว (.p8 ไฟล์) ที่ใช้สำหรับการยืนยันตัวตนกับ Apple",
+ "enable": "เปิดใช้งาน",
+ "enableDescription": "หลังจากเปิดใช้งานแล้ว ผู้ใช้สามารถลงชื่อเข้าใช้ด้วย Apple ID ของตนได้",
+ "keyId": "รหัสคีย์",
+ "keyIdDescription": "รหัสประจำตัวของกุญแจส่วนตัวของคุณจาก Apple Developer Portal",
+ "redirectUri": "URL ที่จะกลับไป",
+ "redirectUriDescription": "URL ที่ Apple จะเปลี่ยนเส้นทางไปหลังจากการยืนยันตัวตนสำเร็จ",
+ "saveFailed": "บันทึกล้มเหลว",
+ "saveSuccess": "บันทึกสำเร็จ",
+ "teamId": "รหัสทีม",
+ "teamIdDescription": "รหัสทีมผู้พัฒนาแอปเปิ้ล"
+}
diff --git a/apps/admin/locales/th-TH/facebook.json b/apps/admin/locales/th-TH/facebook.json
new file mode 100644
index 0000000..f6ae051
--- /dev/null
+++ b/apps/admin/locales/th-TH/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "รหัสลูกค้า",
+ "clientIdDescription": "รหัสแอป Facebook จากคอนโซลนักพัฒนาของ Facebook",
+ "clientSecret": "รหัสลับของลูกค้า",
+ "clientSecretDescription": "รหัสลับของแอป Facebook จาก Facebook Developers Console",
+ "enable": "เปิดใช้งาน",
+ "enableDescription": "หลังจากเปิดใช้งานแล้ว ผู้ใช้สามารถลงชื่อเข้าใช้ด้วยบัญชี Facebook ของพวกเขาได้",
+ "redirectUri": "URI ที่ได้รับอนุญาตให้เปลี่ยนเส้นทาง",
+ "redirectUriDescription": "URL ที่ผู้ใช้จะถูกเปลี่ยนเส้นทางไปหลังจากการยืนยันตัวตนผ่าน Facebook",
+ "saveFailed": "บันทึกล้มเหลว",
+ "saveSuccess": "บันทึกสำเร็จ"
+}
diff --git a/apps/admin/locales/th-TH/github.json b/apps/admin/locales/th-TH/github.json
new file mode 100644
index 0000000..464353d
--- /dev/null
+++ b/apps/admin/locales/th-TH/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "รหัสลูกค้า GitHub",
+ "clientIdDescription": "รหัสไคลเอนต์จากการตั้งค่าแอปพลิเคชัน OAuth ของ GitHub ของคุณ",
+ "clientSecret": "รหัสลับของ GitHub Client",
+ "clientSecretDescription": "รหัสลับของไคลเอนต์จากการตั้งค่าแอปพลิเคชัน GitHub OAuth ของคุณ",
+ "enable": "เปิดใช้งานการยืนยันตัวตนของ GitHub",
+ "enableDescription": "อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชี GitHub ของพวกเขา",
+ "redirectUri": "URL การเรียกกลับการอนุญาต",
+ "redirectUriDescription": "URL ในแอปพลิเคชันของคุณที่ผู้ใช้จะถูกเปลี่ยนเส้นทางหลังจากการยืนยันตัวตนของ GitHub",
+ "saveFailed": "ไม่สามารถบันทึกการตั้งค่า GitHub ได้",
+ "saveSuccess": "บันทึกการตั้งค่า GitHub สำเร็จเรียบร้อยแล้ว"
+}
diff --git a/apps/admin/locales/th-TH/google.json b/apps/admin/locales/th-TH/google.json
new file mode 100644
index 0000000..f3f597e
--- /dev/null
+++ b/apps/admin/locales/th-TH/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "รหัสลูกค้า",
+ "clientIdDescription": "Google OAuth 2.0 Client ID จาก Google Cloud Console",
+ "clientSecret": "รหัสลับของลูกค้า",
+ "clientSecretDescription": "Google OAuth 2.0 Client Secret จาก Google Cloud Console",
+ "enable": "เปิดใช้งาน",
+ "enableDescription": "หลังจากเปิดใช้งาน ผู้ใช้สามารถลงชื่อเข้าใช้ด้วยบัญชี Google ของตนได้",
+ "redirectUri": "อนุญาตให้เปลี่ยนเส้นทาง URI",
+ "redirectUriDescription": "URL ที่ผู้ใช้จะถูกเปลี่ยนเส้นทางไปหลังจากการยืนยันตัวตนของ Google",
+ "saveFailed": "บันทึกล้มเหลว",
+ "saveSuccess": "บันทึกสำเร็จ"
+}
diff --git a/apps/admin/locales/th-TH/telegram.json b/apps/admin/locales/th-TH/telegram.json
new file mode 100644
index 0000000..51198bc
--- /dev/null
+++ b/apps/admin/locales/th-TH/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "รหัสบอท",
+ "clientIdDescription": "Telegram Bot ID, คุณสามารถรับได้จาก @BotFather",
+ "clientSecret": "โทเค็นบอท",
+ "clientSecretDescription": "โทเค็นบอทของ Telegram คุณสามารถรับได้จาก @BotFather",
+ "enable": "เปิดใช้งาน",
+ "enableDescription": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูก และการยกเลิกการผูกโทรศัพท์มือถือจะถูกเปิดใช้งาน",
+ "redirectUri": "เปลี่ยนเส้นทาง URL",
+ "redirectUriDescription": "URL ที่ Telegram จะเปลี่ยนเส้นทางไปหลังจากการยืนยันตัวตนสำเร็จ",
+ "saveFailed": "บันทึกล้มเหลว",
+ "saveSuccess": "บันทึกสำเร็จ"
+}
diff --git a/apps/admin/locales/tr-TR/apple.json b/apps/admin/locales/tr-TR/apple.json
new file mode 100644
index 0000000..f0e377d
--- /dev/null
+++ b/apps/admin/locales/tr-TR/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Hizmet Kimliği",
+ "clientIdDescription": "Apple Servis Kimliği, Apple Geliştirici Portalı'ndan alabilirsiniz",
+ "clientSecret": "Özel Anahtar",
+ "clientSecretDescription": "Apple ile kimlik doğrulama için kullanılan özel anahtar içeriği (.p8 dosyası)",
+ "enable": "Etkinleştir",
+ "enableDescription": "Etkinleştirildikten sonra, kullanıcılar Apple Kimlikleri ile oturum açabilir",
+ "keyId": "Anahtar Kimliği",
+ "keyIdDescription": "Apple Geliştirici Portalı'ndaki özel anahtarınızın kimliği",
+ "redirectUri": "Dönüş URL'si",
+ "redirectUriDescription": "Başarılı kimlik doğrulamasından sonra Apple'ın yönlendireceği URL",
+ "saveFailed": "Kaydetme başarısız oldu",
+ "saveSuccess": "Kaydetme başarılı",
+ "teamId": "Takım Kimliği",
+ "teamIdDescription": "Apple Geliştirici Takım Kimliği"
+}
diff --git a/apps/admin/locales/tr-TR/facebook.json b/apps/admin/locales/tr-TR/facebook.json
new file mode 100644
index 0000000..dda9285
--- /dev/null
+++ b/apps/admin/locales/tr-TR/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Müşteri Kimliği",
+ "clientIdDescription": "Facebook Geliştirici Konsolu'ndan Facebook Uygulama Kimliği",
+ "clientSecret": "İstemci Sırrı",
+ "clientSecretDescription": "Facebook Geliştirici Konsolundan Facebook Uygulama Sırrı",
+ "enable": "Etkinleştir",
+ "enableDescription": "Etkinleştirildikten sonra, kullanıcılar Facebook hesaplarıyla oturum açabilirler",
+ "redirectUri": "Yetkili yönlendirme URI'si",
+ "redirectUriDescription": "Kullanıcının Facebook kimlik doğrulamasından sonra yönlendirileceği URL",
+ "saveFailed": "Kaydetme başarısız oldu",
+ "saveSuccess": "Kaydetme başarılı"
+}
diff --git a/apps/admin/locales/tr-TR/github.json b/apps/admin/locales/tr-TR/github.json
new file mode 100644
index 0000000..f2f83b0
--- /dev/null
+++ b/apps/admin/locales/tr-TR/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub İstemci Kimliği",
+ "clientIdDescription": "GitHub OAuth uygulama ayarlarınızdaki istemci kimliği",
+ "clientSecret": "GitHub İstemci Sırrı",
+ "clientSecretDescription": "GitHub OAuth uygulama ayarlarından gelen istemci sırrı",
+ "enable": "GitHub Kimlik Doğrulamayı Etkinleştir",
+ "enableDescription": "Kullanıcıların GitHub hesaplarıyla oturum açmalarına izin ver",
+ "redirectUri": "Yetkilendirme geri arama URL'si",
+ "redirectUriDescription": "GitHub kimlik doğrulamasından sonra kullanıcıların yönlendirileceği uygulamanızdaki URL",
+ "saveFailed": "GitHub ayarlarını kaydetme başarısız oldu",
+ "saveSuccess": "GitHub ayarları başarıyla kaydedildi"
+}
diff --git a/apps/admin/locales/tr-TR/google.json b/apps/admin/locales/tr-TR/google.json
new file mode 100644
index 0000000..d2a2c93
--- /dev/null
+++ b/apps/admin/locales/tr-TR/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Müşteri Kimliği",
+ "clientIdDescription": "Google Cloud Console'dan Google OAuth 2.0 İstemci Kimliği",
+ "clientSecret": "İstemci Sırrı",
+ "clientSecretDescription": "Google Cloud Konsolu'ndan Google OAuth 2.0 İstemci Sırrı",
+ "enable": "Etkinleştir",
+ "enableDescription": "Etkinleştirildikten sonra, kullanıcılar Google hesaplarıyla oturum açabilirler",
+ "redirectUri": "Yetkili yönlendirme URI'si",
+ "redirectUriDescription": "Kullanıcının Google kimlik doğrulamasından sonra yönlendirileceği URL",
+ "saveFailed": "Kaydetme başarısız oldu",
+ "saveSuccess": "Kaydetme başarılı"
+}
diff --git a/apps/admin/locales/tr-TR/telegram.json b/apps/admin/locales/tr-TR/telegram.json
new file mode 100644
index 0000000..de8a566
--- /dev/null
+++ b/apps/admin/locales/tr-TR/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Bot Kimliği",
+ "clientIdDescription": "Telegram Bot Kimliği, @BotFather'dan alabilirsiniz",
+ "clientSecret": "Bot Jetonu",
+ "clientSecretDescription": "Telegram Bot Token, bunu @BotFather'dan alabilirsiniz",
+ "enable": "Etkinleştir",
+ "enableDescription": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir",
+ "redirectUri": "Yönlendirme URL'si",
+ "redirectUriDescription": "Telegram'un başarılı kimlik doğrulama sonrasında yönlendireceği URL",
+ "saveFailed": "Kaydetme başarısız oldu",
+ "saveSuccess": "Kaydetme başarılı"
+}
diff --git a/apps/admin/locales/uk-UA/apple.json b/apps/admin/locales/uk-UA/apple.json
new file mode 100644
index 0000000..d34ec4d
--- /dev/null
+++ b/apps/admin/locales/uk-UA/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "Ідентифікатор сервісу",
+ "clientIdDescription": "Apple Service ID, ви можете отримати його на порталі розробників Apple",
+ "clientSecret": "Приватний ключ",
+ "clientSecretDescription": "Вміст приватного ключа (.p8 файл), що використовується для автентифікації з Apple",
+ "enable": "Увімкнути",
+ "enableDescription": "Після увімкнення користувачі можуть увійти за допомогою свого Apple ID",
+ "keyId": "Ідентифікатор ключа",
+ "keyIdDescription": "Ідентифікатор вашого приватного ключа з Apple Developer Portal",
+ "redirectUri": "URL повернення",
+ "redirectUriDescription": "URL, на який Apple перенаправить після успішної автентифікації",
+ "saveFailed": "Не вдалося зберегти",
+ "saveSuccess": "Збереження успішне",
+ "teamId": "Ідентифікатор команди",
+ "teamIdDescription": "Ідентифікатор команди розробників Apple"
+}
diff --git a/apps/admin/locales/uk-UA/facebook.json b/apps/admin/locales/uk-UA/facebook.json
new file mode 100644
index 0000000..b5f7efd
--- /dev/null
+++ b/apps/admin/locales/uk-UA/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ідентифікатор клієнта",
+ "clientIdDescription": "Ідентифікатор додатка Facebook з консолі розробників Facebook",
+ "clientSecret": "Секрет клієнта",
+ "clientSecretDescription": "Секретний ключ додатку Facebook з консолі розробників Facebook",
+ "enable": "Увімкнути",
+ "enableDescription": "Після увімкнення користувачі можуть увійти за допомогою свого облікового запису Facebook",
+ "redirectUri": "Авторизований URI перенаправлення",
+ "redirectUriDescription": "URL, на який користувач буде перенаправлений після автентифікації через Facebook",
+ "saveFailed": "Не вдалося зберегти",
+ "saveSuccess": "Збереження успішне"
+}
diff --git a/apps/admin/locales/uk-UA/github.json b/apps/admin/locales/uk-UA/github.json
new file mode 100644
index 0000000..e0dce3f
--- /dev/null
+++ b/apps/admin/locales/uk-UA/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ідентифікатор клієнта GitHub",
+ "clientIdDescription": "Ідентифікатор клієнта з налаштувань вашого GitHub OAuth додатку",
+ "clientSecret": "Секретний ключ клієнта GitHub",
+ "clientSecretDescription": "Секрет клієнта з налаштувань вашого OAuth додатку GitHub",
+ "enable": "Увімкнути автентифікацію через GitHub",
+ "enableDescription": "Дозволити користувачам входити за допомогою своїх облікових записів GitHub",
+ "redirectUri": "URL зворотного виклику авторизації",
+ "redirectUriDescription": "URL у вашому додатку, куди користувачі будуть перенаправлені після автентифікації через GitHub",
+ "saveFailed": "Не вдалося зберегти налаштування GitHub",
+ "saveSuccess": "Налаштування GitHub успішно збережено"
+}
diff --git a/apps/admin/locales/uk-UA/google.json b/apps/admin/locales/uk-UA/google.json
new file mode 100644
index 0000000..75a08d2
--- /dev/null
+++ b/apps/admin/locales/uk-UA/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ідентифікатор клієнта",
+ "clientIdDescription": "Ідентифікатор клієнта Google OAuth 2.0 з консолі Google Cloud",
+ "clientSecret": "Секрет клієнта",
+ "clientSecretDescription": "Секрет клієнта Google OAuth 2.0 з консолі Google Cloud",
+ "enable": "Увімкнути",
+ "enableDescription": "Після увімкнення користувачі можуть увійти за допомогою свого облікового запису Google",
+ "redirectUri": "Авторизований URI перенаправлення",
+ "redirectUriDescription": "URL, на який користувач буде перенаправлений після автентифікації через Google",
+ "saveFailed": "Не вдалося зберегти",
+ "saveSuccess": "Збереження успішне"
+}
diff --git a/apps/admin/locales/uk-UA/telegram.json b/apps/admin/locales/uk-UA/telegram.json
new file mode 100644
index 0000000..c0bdb57
--- /dev/null
+++ b/apps/admin/locales/uk-UA/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "Ідентифікатор бота",
+ "clientIdDescription": "ID телеграм-бота, який ви можете отримати у @BotFather",
+ "clientSecret": "Токен Бота",
+ "clientSecretDescription": "Токен бота Telegram, ви можете отримати його у @BotFather",
+ "enable": "Увімкнути",
+ "enableDescription": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону",
+ "redirectUri": "URL перенаправлення",
+ "redirectUriDescription": "URL, на який Telegram перенаправить після успішної автентифікації",
+ "saveFailed": "Не вдалося зберегти",
+ "saveSuccess": "Збереження успішне"
+}
diff --git a/apps/admin/locales/vi-VN/apple.json b/apps/admin/locales/vi-VN/apple.json
new file mode 100644
index 0000000..40ab4f3
--- /dev/null
+++ b/apps/admin/locales/vi-VN/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "ID Dịch vụ",
+ "clientIdDescription": "Apple Service ID, bạn có thể lấy nó từ Cổng thông tin Nhà phát triển Apple",
+ "clientSecret": "Khóa Riêng",
+ "clientSecretDescription": "Nội dung khóa riêng tư (.p8 file) được sử dụng để xác thực với Apple",
+ "enable": "Kích hoạt",
+ "enableDescription": "Sau khi kích hoạt, người dùng có thể đăng nhập bằng ID Apple của họ",
+ "keyId": "Mã khóa",
+ "keyIdDescription": "ID của khóa riêng tư của bạn từ Cổng thông tin Nhà phát triển Apple",
+ "redirectUri": "URL Trả về",
+ "redirectUriDescription": "URL mà Apple sẽ chuyển hướng đến sau khi xác thực thành công",
+ "saveFailed": "Lưu thất bại",
+ "saveSuccess": "Lưu thành công",
+ "teamId": "ID Đội",
+ "teamIdDescription": "ID Nhóm Nhà Phát Triển Apple"
+}
diff --git a/apps/admin/locales/vi-VN/facebook.json b/apps/admin/locales/vi-VN/facebook.json
new file mode 100644
index 0000000..342d916
--- /dev/null
+++ b/apps/admin/locales/vi-VN/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Khách hàng",
+ "clientIdDescription": "ID ứng dụng Facebook từ Bảng điều khiển Nhà phát triển Facebook",
+ "clientSecret": "Bí mật Khách hàng",
+ "clientSecretDescription": "Mã bí mật ứng dụng Facebook từ Bảng điều khiển Nhà phát triển Facebook",
+ "enable": "Kích hoạt",
+ "enableDescription": "Sau khi kích hoạt, người dùng có thể đăng nhập bằng tài khoản Facebook của họ",
+ "redirectUri": "URI chuyển hướng được ủy quyền",
+ "redirectUriDescription": "URL mà người dùng sẽ được chuyển hướng đến sau khi xác thực Facebook",
+ "saveFailed": "Lưu thất bại",
+ "saveSuccess": "Lưu thành công"
+}
diff --git a/apps/admin/locales/vi-VN/github.json b/apps/admin/locales/vi-VN/github.json
new file mode 100644
index 0000000..536b002
--- /dev/null
+++ b/apps/admin/locales/vi-VN/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Khách hàng GitHub",
+ "clientIdDescription": "ID khách hàng từ cài đặt ứng dụng OAuth GitHub của bạn",
+ "clientSecret": "Mã Bí Mật Khách Hàng GitHub",
+ "clientSecretDescription": "Mã bí mật của ứng dụng OAuth GitHub từ cài đặt ứng dụng của bạn",
+ "enable": "Bật Xác thực GitHub",
+ "enableDescription": "Cho phép người dùng đăng nhập bằng tài khoản GitHub của họ",
+ "redirectUri": "URL gọi lại ủy quyền",
+ "redirectUriDescription": "URL trong ứng dụng của bạn nơi người dùng sẽ được chuyển hướng sau khi xác thực GitHub",
+ "saveFailed": "Không thể lưu cài đặt GitHub",
+ "saveSuccess": "Cài đặt GitHub đã được lưu thành công"
+}
diff --git a/apps/admin/locales/vi-VN/google.json b/apps/admin/locales/vi-VN/google.json
new file mode 100644
index 0000000..c0ad8a1
--- /dev/null
+++ b/apps/admin/locales/vi-VN/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Khách hàng",
+ "clientIdDescription": "ID Khách hàng OAuth 2.0 của Google từ Google Cloud Console",
+ "clientSecret": "Bí mật Khách hàng",
+ "clientSecretDescription": "Mã bí mật OAuth 2.0 của Google từ Bảng điều khiển Google Cloud",
+ "enable": "Kích hoạt",
+ "enableDescription": "Sau khi kích hoạt, người dùng có thể đăng nhập bằng tài khoản Google của họ",
+ "redirectUri": "URI chuyển hướng được ủy quyền",
+ "redirectUriDescription": "URL mà người dùng sẽ được chuyển hướng đến sau khi xác thực Google",
+ "saveFailed": "Lưu thất bại",
+ "saveSuccess": "Lưu thành công"
+}
diff --git a/apps/admin/locales/vi-VN/telegram.json b/apps/admin/locales/vi-VN/telegram.json
new file mode 100644
index 0000000..40fb6d5
--- /dev/null
+++ b/apps/admin/locales/vi-VN/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "ID Bot",
+ "clientIdDescription": "ID Bot Telegram, bạn có thể lấy từ @BotFather",
+ "clientSecret": "Mã thông báo Bot",
+ "clientSecretDescription": "Mã thông báo Bot Telegram, bạn có thể lấy nó từ @BotFather",
+ "enable": "Kích hoạt",
+ "enableDescription": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt",
+ "redirectUri": "URL chuyển hướng",
+ "redirectUriDescription": "URL mà Telegram sẽ chuyển hướng đến sau khi xác thực thành công",
+ "saveFailed": "Lưu không thành công",
+ "saveSuccess": "Lưu thành công"
+}
diff --git a/apps/admin/locales/zh-CN/apple.json b/apps/admin/locales/zh-CN/apple.json
new file mode 100644
index 0000000..d6deab1
--- /dev/null
+++ b/apps/admin/locales/zh-CN/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "服务 ID",
+ "clientIdDescription": "Apple 服务 ID,您可以从 Apple 开发者门户获取",
+ "clientSecret": "私钥",
+ "clientSecretDescription": "用于与 Apple 进行身份验证的私钥内容(.p8 文件)",
+ "enable": "启用",
+ "enableDescription": "启用后,用户可以使用他们的 Apple ID 登录",
+ "keyId": "密钥 ID",
+ "keyIdDescription": "您在 Apple 开发者门户中的私钥 ID",
+ "redirectUri": "返回网址",
+ "redirectUriDescription": "Apple 成功认证后将重定向到的 URL",
+ "saveFailed": "保存失败",
+ "saveSuccess": "保存成功",
+ "teamId": "团队 ID",
+ "teamIdDescription": "Apple 开发者团队 ID"
+}
diff --git a/apps/admin/locales/zh-CN/facebook.json b/apps/admin/locales/zh-CN/facebook.json
new file mode 100644
index 0000000..574924b
--- /dev/null
+++ b/apps/admin/locales/zh-CN/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "客户端 ID",
+ "clientIdDescription": "来自 Facebook 开发者控制台的 Facebook 应用 ID",
+ "clientSecret": "客户端密钥",
+ "clientSecretDescription": "来自 Facebook 开发者控制台的 Facebook 应用密钥",
+ "enable": "启用",
+ "enableDescription": "启用后,用户可以使用他们的 Facebook 帐户登录",
+ "redirectUri": "授权重定向 URI",
+ "redirectUriDescription": "用户在通过 Facebook 认证后将被重定向到的 URL",
+ "saveFailed": "保存失败",
+ "saveSuccess": "保存成功"
+}
diff --git a/apps/admin/locales/zh-CN/github.json b/apps/admin/locales/zh-CN/github.json
new file mode 100644
index 0000000..eed7dd1
--- /dev/null
+++ b/apps/admin/locales/zh-CN/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub 客户端 ID",
+ "clientIdDescription": "来自您的 GitHub OAuth 应用程序设置的客户端 ID",
+ "clientSecret": "GitHub 客户端密钥",
+ "clientSecretDescription": "来自您的 GitHub OAuth 应用程序设置的客户端密钥",
+ "enable": "启用 GitHub 认证",
+ "enableDescription": "允许用户使用他们的GitHub账户登录",
+ "redirectUri": "授权回调URL",
+ "redirectUriDescription": "在您的应用程序中,用户在 GitHub 认证后将被重定向到的 URL",
+ "saveFailed": "保存 GitHub 设置失败",
+ "saveSuccess": "GitHub 设置已成功保存"
+}
diff --git a/apps/admin/locales/zh-CN/google.json b/apps/admin/locales/zh-CN/google.json
new file mode 100644
index 0000000..9d89f2a
--- /dev/null
+++ b/apps/admin/locales/zh-CN/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "客户端 ID",
+ "clientIdDescription": "来自 Google Cloud Console 的 Google OAuth 2.0 客户端 ID",
+ "clientSecret": "客户端密钥",
+ "clientSecretDescription": "来自 Google Cloud Console 的 Google OAuth 2.0 客户端密钥",
+ "enable": "启用",
+ "enableDescription": "启用后,用户可以使用他们的 Google 帐户登录",
+ "redirectUri": "授权重定向 URI",
+ "redirectUriDescription": "用户在通过 Google 认证后将被重定向到的 URL",
+ "saveFailed": "保存失败",
+ "saveSuccess": "保存成功"
+}
diff --git a/apps/admin/locales/zh-CN/telegram.json b/apps/admin/locales/zh-CN/telegram.json
new file mode 100644
index 0000000..8e58e67
--- /dev/null
+++ b/apps/admin/locales/zh-CN/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "机器人ID",
+ "clientIdDescription": "Telegram 机器人 ID,您可以从 @BotFather 获取",
+ "clientSecret": "机器人令牌",
+ "clientSecretDescription": "Telegram 机器人令牌,您可以从 @BotFather 获取",
+ "enable": "启用",
+ "enableDescription": "启用后,将启用手机注册、登录、绑定和解绑功能",
+ "redirectUri": "重定向 URL",
+ "redirectUriDescription": "Telegram 成功认证后将重定向到的 URL",
+ "saveFailed": "保存失败",
+ "saveSuccess": "保存成功"
+}
diff --git a/apps/admin/locales/zh-HK/apple.json b/apps/admin/locales/zh-HK/apple.json
new file mode 100644
index 0000000..b5273d7
--- /dev/null
+++ b/apps/admin/locales/zh-HK/apple.json
@@ -0,0 +1,16 @@
+{
+ "clientId": "服務編號",
+ "clientIdDescription": "Apple 服務 ID,您可以從 Apple 開發者門戶獲取",
+ "clientSecret": "私密金鑰",
+ "clientSecretDescription": "用於與 Apple 認證的私鑰內容(.p8 文件)",
+ "enable": "啟用",
+ "enableDescription": "啟用後,用戶可以使用其 Apple ID 登入",
+ "keyId": "鍵 ID",
+ "keyIdDescription": "您在 Apple 開發者平台上的私鑰 ID",
+ "redirectUri": "返回網址",
+ "redirectUriDescription": "Apple 成功驗證後將重定向到的 URL",
+ "saveFailed": "儲存失敗",
+ "saveSuccess": "儲存成功",
+ "teamId": "團隊 ID",
+ "teamIdDescription": "Apple 開發者團隊 ID"
+}
diff --git a/apps/admin/locales/zh-HK/facebook.json b/apps/admin/locales/zh-HK/facebook.json
new file mode 100644
index 0000000..6b4fbb9
--- /dev/null
+++ b/apps/admin/locales/zh-HK/facebook.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "客戶 ID",
+ "clientIdDescription": "來自 Facebook 開發者控制台的 Facebook 應用程式 ID",
+ "clientSecret": "客戶密碼",
+ "clientSecretDescription": "來自 Facebook 開發者控制台的 Facebook 應用程式密碼",
+ "enable": "啟用",
+ "enableDescription": "啟用後,用戶可以使用他們的 Facebook 帳戶登入",
+ "redirectUri": "授權重定向 URI",
+ "redirectUriDescription": "用戶在 Facebook 認證後將被重定向的網址",
+ "saveFailed": "儲存失敗",
+ "saveSuccess": "儲存成功"
+}
diff --git a/apps/admin/locales/zh-HK/github.json b/apps/admin/locales/zh-HK/github.json
new file mode 100644
index 0000000..0f17684
--- /dev/null
+++ b/apps/admin/locales/zh-HK/github.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "GitHub 客戶端 ID",
+ "clientIdDescription": "來自您的 GitHub OAuth 應用程式設定的客戶端 ID",
+ "clientSecret": "GitHub 客戶端密碼",
+ "clientSecretDescription": "來自您 GitHub OAuth 應用程式設定的客戶端密碼",
+ "enable": "啟用 GitHub 認證",
+ "enableDescription": "允許用戶使用他們的 GitHub 帳戶登入",
+ "redirectUri": "授權回調網址",
+ "redirectUriDescription": "在您的應用程式中,GitHub 認證後用戶將被重定向的 URL",
+ "saveFailed": "無法儲存 GitHub 設定",
+ "saveSuccess": "GitHub 設定已成功儲存"
+}
diff --git a/apps/admin/locales/zh-HK/google.json b/apps/admin/locales/zh-HK/google.json
new file mode 100644
index 0000000..0970ff7
--- /dev/null
+++ b/apps/admin/locales/zh-HK/google.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "客戶 ID",
+ "clientIdDescription": "來自 Google Cloud Console 的 Google OAuth 2.0 客戶端 ID",
+ "clientSecret": "客戶密碼",
+ "clientSecretDescription": "來自 Google Cloud Console 的 Google OAuth 2.0 客戶端密鑰",
+ "enable": "啟用",
+ "enableDescription": "啟用後,用戶可以使用他們的 Google 帳戶登入",
+ "redirectUri": "授權重定向 URI",
+ "redirectUriDescription": "用戶在完成 Google 認證後將被重定向的網址",
+ "saveFailed": "儲存失敗",
+ "saveSuccess": "儲存成功"
+}
diff --git a/apps/admin/locales/zh-HK/telegram.json b/apps/admin/locales/zh-HK/telegram.json
new file mode 100644
index 0000000..ed07d49
--- /dev/null
+++ b/apps/admin/locales/zh-HK/telegram.json
@@ -0,0 +1,12 @@
+{
+ "clientId": "機械人 ID",
+ "clientIdDescription": "Telegram 機械人 ID,你可以從 @BotFather 獲取",
+ "clientSecret": "機械人令牌",
+ "clientSecretDescription": "Telegram 機械人令牌,你可以從 @BotFather 獲取",
+ "enable": "啟用",
+ "enableDescription": "啟用後,將開啟手機註冊、登入、綁定及解除綁定功能",
+ "redirectUri": "重定向網址",
+ "redirectUriDescription": "Telegram 成功驗證後將重定向到的 URL",
+ "saveFailed": "儲存失敗",
+ "saveSuccess": "儲存成功"
+}
diff --git a/apps/admin/services/admin/system.ts b/apps/admin/services/admin/system.ts
index 7da3a2e..62acc47 100644
--- a/apps/admin/services/admin/system.ts
+++ b/apps/admin/services/admin/system.ts
@@ -226,6 +226,44 @@ export async function updateNodeConfig(body: API.NodeConfig, options?: { [key: s
});
}
+/** Get OAuth config GET /v1/admin/system/oauth_config */
+export async function getOAuthConfig(options?: { [key: string]: any }) {
+ return request(
+ '/v1/admin/system/oauth_config',
+ {
+ method: 'GET',
+ ...(options || {}),
+ },
+ );
+}
+
+/** Update oauth config PUT /v1/admin/system/oauth_config */
+export async function updateOAuthConfig(body: API.OAuthConfig, options?: { [key: string]: any }) {
+ return request('/v1/admin/system/oauth_config', {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** OAuth create config POST /v1/admin/system/oauth_config */
+export async function oAuthCreateConfig(
+ body: API.OAuthCreateRequest,
+ options?: { [key: string]: any },
+) {
+ return request('/v1/admin/system/oauth_config', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** Get register config GET /v1/admin/system/register_config */
export async function getRegisterConfig(options?: { [key: string]: any }) {
return request('/v1/admin/system/register_config', {
diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts
index ccbfcbb..9b57ccc 100644
--- a/apps/admin/services/admin/typings.d.ts
+++ b/apps/admin/services/admin/typings.d.ts
@@ -123,6 +123,7 @@ declare namespace API {
name: string;
description: string;
subscribe_type: string;
+ platform: ApplicationPlatform;
};
type CreateApplicationVersionRequest = {
@@ -618,6 +619,31 @@ declare namespace API {
last_at: number;
};
+ type OAuthConfig = {
+ id: number;
+ platform: 'github' | 'google' | 'apple' | 'qq' | 'wechat' | 'telegram' | 'facebook';
+ team_id: string;
+ key_id: string;
+ client_id: string;
+ client_secret: string;
+ redirect: string;
+ enabled: boolean;
+ };
+
+ type OAuthCreateRequest = {
+ platform: 'github' | 'google' | 'apple' | 'qq' | 'wechat' | 'telegram' | 'facebook';
+ team_id: string;
+ key_id: string;
+ client_id: string;
+ client_secret: string;
+ enabled: boolean;
+ redirect: string;
+ };
+
+ type OAuthQueryResponse = {
+ list: OAuthConfig[];
+ };
+
type OnlineUser = {
uid: number;
ip: string;
@@ -1027,6 +1053,7 @@ declare namespace API {
name: string;
description: string;
subscribe_type: string;
+ platform: ApplicationPlatform;
};
type UpdateApplicationVersionRequest = {
diff --git a/apps/admin/services/common/index.ts b/apps/admin/services/common/index.ts
index 310d348..61ba129 100644
--- a/apps/admin/services/common/index.ts
+++ b/apps/admin/services/common/index.ts
@@ -1,10 +1,12 @@
// @ts-ignore
-/* eslint-disable */
+
// API 更新时间:
// API 唯一标识:
import * as auth from './auth';
import * as common from './common';
+import * as oauth from './oauth';
export default {
auth,
+ oauth,
common,
};
diff --git a/apps/admin/services/common/oauth.ts b/apps/admin/services/common/oauth.ts
new file mode 100644
index 0000000..4b769b8
--- /dev/null
+++ b/apps/admin/services/common/oauth.ts
@@ -0,0 +1,47 @@
+// @ts-ignore
+/* eslint-disable */
+import request from '@/utils/request';
+
+/** Apple Login Callback POST /v1/auth/oauth/callback/apple */
+export async function appleLoginCallback(options?: { [key: string]: any }) {
+ return request('/v1/auth/oauth/callback/apple', {
+ method: 'POST',
+ ...(options || {}),
+ });
+}
+
+/** Facebook Login Callback GET /v1/auth/oauth/callback/facebook */
+export async function facebookLoginCallback(options?: { [key: string]: any }) {
+ return request('/v1/auth/oauth/callback/facebook', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** Google Login Callback GET /v1/auth/oauth/callback/google */
+export async function googleLoginCallback(options?: { [key: string]: any }) {
+ return request('/v1/auth/oauth/callback/google', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** Telegram Login Callback GET /v1/auth/oauth/callback/telegram */
+export async function telegramLoginCallback(options?: { [key: string]: any }) {
+ return request('/v1/auth/oauth/callback/telegram', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** OAuth login POST /v1/auth/oauth/login */
+export async function oAuthLogin(body: API.OAthLoginRequest, options?: { [key: string]: any }) {
+ return request('/v1/auth/oauth/login', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts
index 04164fb..d153cb8 100644
--- a/apps/admin/services/common/typings.d.ts
+++ b/apps/admin/services/common/typings.d.ts
@@ -205,6 +205,26 @@ declare namespace API {
last_at: number;
};
+ type OAthLoginRequest = {
+ /** google, facebook, apple, telegram, github etc. */
+ method: string;
+ };
+
+ type OAuthConfig = {
+ id: number;
+ platform: 'github' | 'google' | 'apple' | 'qq' | 'wechat' | 'telegram' | 'facebook';
+ team_id: string;
+ key_id: string;
+ client_id: string;
+ client_secret: string;
+ redirect: string;
+ enabled: boolean;
+ };
+
+ type OAuthLoginResponse = {
+ redirect: string;
+ };
+
type OnlineUser = {
uid: number;
ip: string;
diff --git a/bun.lockb b/bun.lockb
index 29b1e95..33f8766 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 00ee3dc..923087c 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -60,10 +60,11 @@
"cmdk": "1.0.4",
"date-fns": "^4.1.0",
"embla-carousel-react": "^8.5.2",
- "framer-motion": "^11.16.1",
+ "framer-motion": "^11.18.1",
"input-otp": "^1.4.2",
- "lucide-react": "^0.469.0",
+ "lucide-react": "^0.473.0",
"mathjs": "^14.0.1",
+ "motion": "^11.18.1",
"next-themes": "^0.4.4",
"react-day-picker": "8.10.1",
"react-hook-form": "^7.54.2",
@@ -77,7 +78,7 @@
"remark-math": "^6.0.0",
"remark-toc": "^9.0.0",
"rtl-detect": "^1.1.2",
- "sonner": "^1.7.1",
+ "sonner": "^1.7.2",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7",
"vaul": "^1.1.2",
diff --git a/packages/ui/src/components/hyper-text.tsx b/packages/ui/src/components/hyper-text.tsx
new file mode 100644
index 0000000..4cb162a
--- /dev/null
+++ b/packages/ui/src/components/hyper-text.tsx
@@ -0,0 +1,133 @@
+'use client';
+
+import { cn } from '@workspace/ui/lib/utils';
+import { AnimatePresence, motion, MotionProps } from 'motion/react';
+import { useEffect, useRef, useState } from 'react';
+
+type CharacterSet = string[] | readonly string[];
+
+interface HyperTextProps extends MotionProps {
+ /** The text content to be animated */
+ children: string;
+ /** Optional className for styling */
+ className?: string;
+ /** Duration of the animation in milliseconds */
+ duration?: number;
+ /** Delay before animation starts in milliseconds */
+ delay?: number;
+ /** Component to render as - defaults to div */
+ as?: React.ElementType;
+ /** Whether to start animation when element comes into view */
+ startOnView?: boolean;
+ /** Whether to trigger animation on hover */
+ animateOnHover?: boolean;
+ /** Custom character set for scramble effect. Defaults to uppercase alphabet */
+ characterSet?: CharacterSet;
+}
+
+const DEFAULT_CHARACTER_SET = Object.freeze(
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),
+) as readonly string[];
+
+const getRandomInt = (max: number): number => Math.floor(Math.random() * max);
+
+export default function HyperText({
+ children,
+ className,
+ duration = 800,
+ delay = 0,
+ as: Component = 'div',
+ startOnView = false,
+ animateOnHover = true,
+ characterSet = DEFAULT_CHARACTER_SET,
+ ...props
+}: HyperTextProps) {
+ const MotionComponent = motion.create(Component, {
+ forwardMotionProps: true,
+ });
+
+ const [displayText, setDisplayText] = useState(() => children.split(''));
+ const [isAnimating, setIsAnimating] = useState(false);
+ const iterationCount = useRef(0);
+ const elementRef = useRef(null);
+
+ const handleAnimationTrigger = () => {
+ if (animateOnHover && !isAnimating) {
+ iterationCount.current = 0;
+ setIsAnimating(true);
+ }
+ };
+
+ // Handle animation start based on view or delay
+ useEffect(() => {
+ if (!startOnView) {
+ const startTimeout = setTimeout(() => {
+ setIsAnimating(true);
+ }, delay);
+ return () => clearTimeout(startTimeout);
+ }
+
+ const observer = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting) {
+ setTimeout(() => {
+ setIsAnimating(true);
+ }, delay);
+ observer.disconnect();
+ }
+ },
+ { threshold: 0.1, rootMargin: '-30% 0px -30% 0px' },
+ );
+
+ if (elementRef.current) {
+ observer.observe(elementRef.current);
+ }
+
+ return () => observer.disconnect();
+ }, [delay, startOnView]);
+
+ // Handle scramble animation
+ useEffect(() => {
+ if (!isAnimating) return;
+
+ const intervalDuration = duration / (children.length * 10);
+ const maxIterations = children.length;
+
+ const interval = setInterval(() => {
+ if (iterationCount.current < maxIterations) {
+ setDisplayText((currentText) =>
+ currentText.map((letter, index) =>
+ letter === ' '
+ ? letter
+ : index <= iterationCount.current
+ ? children[index]
+ : characterSet[getRandomInt(characterSet.length)],
+ ),
+ );
+ iterationCount.current = iterationCount.current + 0.1;
+ } else {
+ setIsAnimating(false);
+ clearInterval(interval);
+ }
+ }, intervalDuration);
+
+ return () => clearInterval(interval);
+ }, [children, duration, isAnimating, characterSet]);
+
+ return (
+
+
+ {displayText.map((letter, index) => (
+
+ {letter.toUpperCase()}
+
+ ))}
+
+
+ );
+}
diff --git a/packages/ui/src/components/orbiting-circles.tsx b/packages/ui/src/components/orbiting-circles.tsx
new file mode 100644
index 0000000..aaca5fa
--- /dev/null
+++ b/packages/ui/src/components/orbiting-circles.tsx
@@ -0,0 +1,70 @@
+import { cn } from '@workspace/ui/lib/utils';
+import React from 'react';
+
+export interface OrbitingCirclesProps extends React.HTMLAttributes {
+ className?: string;
+ children?: React.ReactNode;
+ reverse?: boolean;
+ duration?: number;
+ delay?: number;
+ radius?: number;
+ path?: boolean;
+ iconSize?: number;
+ speed?: number;
+}
+
+export function OrbitingCircles({
+ className,
+ children,
+ reverse,
+ duration = 20,
+ radius = 160,
+ path = true,
+ iconSize = 30,
+ speed = 1,
+ ...props
+}: OrbitingCirclesProps) {
+ const calculatedDuration = duration / speed;
+ return (
+ <>
+ {path && (
+
+ )}
+ {React.Children.map(children, (child, index) => {
+ const angle = (360 / React.Children.count(children)) * index;
+ return (
+
+ {child}
+
+ );
+ })}
+ >
+ );
+}
diff --git a/packages/ui/tailwind.config.ts b/packages/ui/tailwind.config.ts
index 846dfed..06864bc 100644
--- a/packages/ui/tailwind.config.ts
+++ b/packages/ui/tailwind.config.ts
@@ -92,10 +92,21 @@ const config = {
height: '0',
},
},
+ 'orbit': {
+ '0%': {
+ transform:
+ 'rotate(calc(var(--angle) * 1deg)) translateY(calc(var(--radius) * 1px)) rotate(calc(var(--angle) * -1deg))',
+ },
+ '100%': {
+ transform:
+ 'rotate(calc(var(--angle) * 1deg + 360deg)) translateY(calc(var(--radius) * 1px)) rotate(calc((var(--angle) * -1deg) - 360deg))',
+ },
+ },
},
animation: {
'accordion-down': 'accordion-down 0.2s ease-out',
'accordion-up': 'accordion-up 0.2s ease-out',
+ 'orbit': 'orbit calc(var(--duration)*1s) linear infinite',
},
},
},
diff --git a/scripts/update-shadcn-ui.sh b/scripts/update-shadcn-ui.sh
index cdcb8a5..cf5dc8e 100755
--- a/scripts/update-shadcn-ui.sh
+++ b/scripts/update-shadcn-ui.sh
@@ -6,3 +6,6 @@ bunx --bun shadcn@canary add -a -o
bunx --bun shadcn@canary add https://ui.aceternity.com/registry/timeline.json -o
bunx --bun shadcn@canary add https://ui.aceternity.com/registry/text-generate-effect.json -o
bunx --bun shadcn@canary add https://ui.aceternity.com/registry/hover-border-gradient.json -o
+
+bunx --bun shadcn@canary add https://magicui.design/r/styles/default/orbiting-circles.json -o
+bunx --bun shadcn@canary add https://magicui.design/r/styles/default/hyper-text.json -o