Compare commits

...

37 Commits

Author SHA1 Message Date
semantic-release-bot 047a69886e 🔖 chore(release): v1.0.0-beta.25 [skip ci]
# [1.0.0-beta.25](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.24...v1.0.0-beta.25) (2025-03-01)

###  Features

* **auth**: Add privacy policy link to the footer ([8e16ef1](https://github.com/perfect-panel/ppanel-web/commit/8e16ef1))

### 🐛 Bug Fixes

* **dashboard**: Display subscription creation date in user dashboard ([d0e6df0](https://github.com/perfect-panel/ppanel-web/commit/d0e6df0))
* **request**: Add error code 40005 to trigger logout ([71bf002](https://github.com/perfect-panel/ppanel-web/commit/71bf002))
* **subscribe**: Update payment return URL ([2b80496](https://github.com/perfect-panel/ppanel-web/commit/2b80496))
2025-03-01 12:59:06 +00:00
web@ppanel 71bf002370 🐛 fix(request): Add error code 40005 to trigger logout 2025-03-01 19:55:55 +07:00
web@ppanel d0e6df044e 🐛 fix(dashboard): Display subscription creation date in user dashboard 2025-03-01 19:55:31 +07:00
web@ppanel 8e16ef17ed feat(auth): Add privacy policy link to the footer 2025-03-01 19:40:45 +07:00
web@ppanel 2b80496637 🐛 fix(subscribe): Update payment return URL 2025-03-01 19:35:32 +07:00
semantic-release-bot 01a3aa02ec 🔖 chore(release): v1.0.0-beta.24 [skip ci]
# [1.0.0-beta.24](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.23...v1.0.0-beta.24) (2025-02-27)

### ♻ Code Refactoring

* **ui**: Optimize document display ([2ca2992](https://github.com/perfect-panel/ppanel-web/commit/2ca2992))
* Reduce code complexity and improve readability ([e11f18c](https://github.com/perfect-panel/ppanel-web/commit/e11f18c))

###  Features

* **loading**: Add loading components and integrate them in Providers ([d5847fa](https://github.com/perfect-panel/ppanel-web/commit/d5847fa))

### 🎫 Chores

* **merge**: Add advertising module and device settings ([0130e02](https://github.com/perfect-panel/ppanel-web/commit/0130e02))

### 🐛 Bug Fixes

* **locales**: Order recharge related fields ([35210fe](https://github.com/perfect-panel/ppanel-web/commit/35210fe))
2025-02-27 08:02:53 +00:00
web@ppanel 35210fe8cf 🐛 fix(locales): Order recharge related fields 2025-02-27 14:53:19 +07:00
web@ppanel d5847faeda feat(loading): Add loading components and integrate them in Providers 2025-02-27 14:44:30 +07:00
web@ppanel 0130e02ffd 🔧 chore(merge): Add advertising module and device settings 2025-02-27 13:46:51 +07:00
web@ppanel c2b858e3fe Merge pull request #11 from turbolnk-com/develop
♻️ refactor(ui): Optimize document display
2025-02-25 18:35:05 +07:00
turbolnk e11f18c034 ♻️ refactor: Reduce code complexity and improve readability 2025-02-25 19:31:32 +08:00
turbolnk 2ca299224d ♻️ refactor(ui): Optimize document display 2025-02-25 18:38:25 +08:00
semantic-release-bot cf1d66d07e 🔖 chore(release): v1.0.0-beta.23 [skip ci]
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)

### 🐛 Bug Fixes

* **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
2025-02-24 05:10:30 +00:00
web@ppanel 62662bb79c 🐛 fix(auth): Update email verification logic to use domain suffix check 2025-02-24 12:07:41 +07:00
semantic-release-bot c0fb34fa50 🔖 chore(release): v1.0.0-beta.22 [skip ci]
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)

### 🐛 Bug Fixes

* **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
2025-02-23 15:06:05 +00:00
web@ppanel 68f6ab2e6c 🐛 fix(locales): Removed language file import to clean up unnecessary language support 2025-02-23 22:03:15 +07:00
semantic-release-bot ca642c2001 🔖 chore(release): v1.0.0-beta.21 [skip ci]
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)

###  Features

* **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))

### 🐛 Bug Fixes

* **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
* **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
2025-02-23 14:17:29 +00:00
web@ppanel 5b151cdbfc 🐛 fix(locales): Removed multilingual files to clean up unnecessary language support 2025-02-23 21:14:17 +07:00
web@ppanel 14b3af5f96 🐛 fix(table): Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback 2025-02-23 20:59:48 +07:00
web@ppanel baa68f03e3 feat(privacy-policy): Add privacy policy related text and links 2025-02-23 20:54:56 +07:00
web@ppanel 87381da1e5 🐛 fix(locales): Update custom HTML description in language file, 2025-02-23 17:25:31 +07:00
semantic-release-bot bbd44f0107 🔖 chore(release): v1.0.0-beta.20 [skip ci]
# [1.0.0-beta.20](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.19...v1.0.0-beta.20) (2025-02-23)

### 🐛 Bug Fixes

* **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
* **subscribe**: Update subscription domain placeholder to include examples; improve site name retrieval in global store ([c65a44c](https://github.com/perfect-panel/ppanel-web/commit/c65a44c))
2025-02-23 06:31:01 +00:00
web@ppanel c65a44c2c7 🐛 fix(subscribe): Update subscription domain placeholder to include examples; improve site name retrieval in global store 2025-02-23 13:25:01 +07:00
web@ppanel 715d0113ca 🐛 fix(auth): Add error handling to form submission and reset Turnstile on failure 2025-02-23 13:12:25 +07:00
semantic-release-bot 0f15fb82cb 🔖 chore(release): v1.0.0-beta.19 [skip ci]
# [1.0.0-beta.19](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2025-02-23)

###  Features

* **form**: Make version field optional and set default value; update site domain placeholder for clarity ([42ba9e8](https://github.com/perfect-panel/ppanel-web/commit/42ba9e8))

### 🐛 Bug Fixes

* **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
2025-02-23 05:58:05 +00:00
web@ppanel 320a7dc342 🐛 fix(auth): Refactor forms to use Turnstile ref for reset functionality 2025-02-23 12:55:21 +07:00
web@ppanel 42ba9e88ad feat(form): Make version field optional and set default value; update site domain placeholder for clarity 2025-02-23 12:46:29 +07:00
semantic-release-bot 4a002333d4 🔖 chore(release): v1.0.0-beta.18 [skip ci]
# [1.0.0-beta.18](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2025-02-22)

###  Features

* **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
* **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))

### 🐛 Bug Fixes

* **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
2025-02-22 16:38:46 +00:00
web@ppanel 6384237782 feat(platform): Update platform naming and add keywords and custom HTML fields 2025-02-22 23:35:30 +07:00
web@ppanel 557c5cdc29 🐛 fix(locales): Update custom HTML description for clarity across multiple languages 2025-02-22 12:51:57 +07:00
web@ppanel f9d7736e48 feat(site): Added localization support for custom HTML and keyword fields 2025-02-22 12:33:09 +07:00
semantic-release-bot 5b64389544 🔖 chore(release): v1.0.0-beta.17 [skip ci]
# [1.0.0-beta.17](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2025-02-21)

### 🐛 Bug Fixes

* **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
2025-02-21 13:26:11 +00:00
web@ppanel 23833b47d1 🐛 fix(auth): Refactor reset password form to simplify code input and update placeholder text 2025-02-21 20:23:30 +07:00
semantic-release-bot c3eff0a0e7 🔖 chore(release): v1.0.0-beta.16 [skip ci]
# [1.0.0-beta.16](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2025-02-21)

### 🐛 Bug Fixes

* **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
2025-02-21 13:18:47 +00:00
web@ppanel 6f7bc37233 🐛 fix(auth): Simplify email verification code input rendering 2025-02-21 20:16:02 +07:00
semantic-release-bot b2e8fadaf3 🔖 chore(release): v1.0.0-beta.15 [skip ci]
# [1.0.0-beta.15](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2025-02-21)

### 🐛 Bug Fixes

* **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
2025-02-21 12:59:02 +00:00
web@ppanel 315c8f9afe 🐛 fix(profile): Restore filter to ensure only valid OAuth accounts are shown 2025-02-21 19:55:24 +07:00
244 changed files with 3361 additions and 1447 deletions
+121 -4
View File
@@ -1,19 +1,136 @@
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.14](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2025-02-21)
# [1.0.0-beta.25](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.24...v1.0.0-beta.25) (2025-03-01)
### ✨ Features
* **auth**: Add privacy policy link to the footer ([8e16ef1](https://github.com/perfect-panel/ppanel-web/commit/8e16ef1))
### 🐛 Bug Fixes
* **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
* **dashboard**: Display subscription creation date in user dashboard ([d0e6df0](https://github.com/perfect-panel/ppanel-web/commit/d0e6df0))
* **request**: Add error code 40005 to trigger logout ([71bf002](https://github.com/perfect-panel/ppanel-web/commit/71bf002))
* **subscribe**: Update payment return URL ([2b80496](https://github.com/perfect-panel/ppanel-web/commit/2b80496))
# [1.0.0-beta.24](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.23...v1.0.0-beta.24) (2025-02-27)
### ♻ Code Refactoring
* **ui**: Optimize document display ([2ca2992](https://github.com/perfect-panel/ppanel-web/commit/2ca2992))
* Reduce code complexity and improve readability ([e11f18c](https://github.com/perfect-panel/ppanel-web/commit/e11f18c))
### ✨ Features
* **loading**: Add loading components and integrate them in Providers ([d5847fa](https://github.com/perfect-panel/ppanel-web/commit/d5847fa))
### 🎫 Chores
* **merge**: Add advertising module and device settings ([0130e02](https://github.com/perfect-panel/ppanel-web/commit/0130e02))
### 🐛 Bug Fixes
* **locales**: Order recharge related fields ([35210fe](https://github.com/perfect-panel/ppanel-web/commit/35210fe))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)
### 🐛 Bug Fixes
- **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)
### 🐛 Bug Fixes
- **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)
### ✨ Features
- **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
### 🐛 Bug Fixes
- **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
- **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
- **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.20](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.19...v1.0.0-beta.20) (2025-02-23)
### 🐛 Bug Fixes
- **auth**: Add error handling to form submission and reset Turnstile on failure ([715d011](https://github.com/perfect-panel/ppanel-web/commit/715d011))
- **subscribe**: Update subscription domain placeholder to include examples; improve site name retrieval in global store ([c65a44c](https://github.com/perfect-panel/ppanel-web/commit/c65a44c))
# [1.0.0-beta.19](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2025-02-23)
### ✨ Features
- **form**: Make version field optional and set default value; update site domain placeholder for clarity ([42ba9e8](https://github.com/perfect-panel/ppanel-web/commit/42ba9e8))
### 🐛 Bug Fixes
- **auth**: Refactor forms to use Turnstile ref for reset functionality ([320a7dc](https://github.com/perfect-panel/ppanel-web/commit/320a7dc))
# [1.0.0-beta.18](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2025-02-22)
### ✨ Features
- **platform**: Update platform naming and add keywords and custom HTML fields ([6384237](https://github.com/perfect-panel/ppanel-web/commit/6384237))
- **site**: Added localization support for custom HTML and keyword fields ([f9d7736](https://github.com/perfect-panel/ppanel-web/commit/f9d7736))
### 🐛 Bug Fixes
- **locales**: Update custom HTML description for clarity across multiple languages ([557c5cd](https://github.com/perfect-panel/ppanel-web/commit/557c5cd))
<a name="readme-top"></a>
# Changelog
# [1.0.0-beta.17](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2025-02-21)
### 🐛 Bug Fixes
- **auth**: Refactor reset password form to simplify code input and update placeholder text ([23833b4](https://github.com/perfect-panel/ppanel-web/commit/23833b4))
# [1.0.0-beta.16](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2025-02-21)
### 🐛 Bug Fixes
- **auth**: Simplify email verification code input rendering ([6f7bc37](https://github.com/perfect-panel/ppanel-web/commit/6f7bc37))
# [1.0.0-beta.15](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2025-02-21)
### 🐛 Bug Fixes
- **profile**: Restore filter to ensure only valid OAuth accounts are shown ([315c8f9](https://github.com/perfect-panel/ppanel-web/commit/315c8f9))
# [1.0.0-beta.14](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2025-02-21)
### 🐛 Bug Fixes
- **locales**: Fixed description in multilingual files, updated text related to email registration functionality ([c356bc2](https://github.com/perfect-panel/ppanel-web/commit/c356bc2))
# [1.0.0-beta.13](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2025-02-21)
### 🐛 Bug Fixes
* **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
- **api**: Fix type error in API request and add return URL parameter ([ee286dd](https://github.com/perfect-panel/ppanel-web/commit/ee286dd))
<a name="readme-top"></a>
+13 -4
View File
@@ -5,10 +5,10 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/
import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function LoginForm({
loading,
@@ -38,10 +38,19 @@ export default function LoginForm({
defaultValues: initialValues,
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -73,7 +82,7 @@ export default function LoginForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='login' {...field} />
<CloudFlareTurnstile id='login' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+24 -10
View File
@@ -6,11 +6,11 @@ import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { Markdown } from '@workspace/ui/custom-components/markdown';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function RegisterForm({
loading,
@@ -31,11 +31,10 @@ export default function RegisterForm({
const handleCheckUser = async (email: string) => {
try {
if (!auth.email.enable_domain_suffix) return true;
const domain = email.split('@')[1];
const isValid =
!auth.email.enable_verify ||
auth.email?.domain_suffix_list.split('\n').includes(domain || '');
return !isValid;
const isValid = auth.email?.domain_suffix_list.split('\n').includes(domain || '');
return isValid;
} catch (error) {
console.log('Error checking user:', error);
return false;
@@ -53,7 +52,7 @@ export default function RegisterForm({
password: z.string(),
repeat_password: z.string(),
code: auth.email.enable_verify ? z.string() : z.string().nullish(),
invite: invite.forced_invite ? z.string() : z.string().nullish(),
invite: invite.forced_invite ? z.string().min(1) : z.string().nullish(),
cf_token:
verify.enable_register_verify && verify.turnstile_site_key
? z.string()
@@ -77,13 +76,22 @@ export default function RegisterForm({
},
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
{auth.register.stop_register ? (
<Markdown>{t('message')}</Markdown>
) : (
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -114,7 +122,12 @@ export default function RegisterForm({
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter password again...' type='password' {...field} />
<Input
disabled={loading}
placeholder='Enter password again...'
type='password'
{...field}
/>
</FormControl>
<FormMessage />
</FormItem>
@@ -129,6 +142,7 @@ export default function RegisterForm({
<FormControl>
<div className='flex items-center gap-2'>
<Input
disabled={loading}
placeholder='Enter code...'
type='text'
{...field}
@@ -172,7 +186,7 @@ export default function RegisterForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='register' {...field} />
<CloudFlareTurnstile id='register' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+42 -35
View File
@@ -5,11 +5,11 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/
import { Input } from '@workspace/ui/components/input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react';
import { Dispatch, SetStateAction, useRef } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
import CloudFlareTurnstile, { TurnstileRef } from '../turnstile';
export default function ResetForm({
loading,
@@ -43,10 +43,19 @@ export default function ResetForm({
defaultValues: initialValues,
});
const turnstile = useRef<TurnstileRef>(null);
const handleSubmit = form.handleSubmit((data) => {
try {
onSubmit(data);
} catch (error) {
turnstile.current?.reset();
}
});
return (
<>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<form onSubmit={handleSubmit} className='grid gap-6'>
<FormField
control={form.control}
name='email'
@@ -61,45 +70,43 @@ export default function ResetForm({
/>
<FormField
control={form.control}
name='password'
name='code'
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter your password...' type='password' {...field} />
<div className='flex items-center gap-2'>
<Input
disabled={loading}
placeholder='Enter code...'
type='text'
{...field}
value={field.value as string}
/>
<SendCode
type='email'
params={{
...form.getValues(),
type: 2,
}}
/>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input placeholder='Enter your new password...' type='password' {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
{auth?.email?.enable_verify && (
<FormField
control={form.control}
name='code'
render={({ field }) => (
<FormItem>
<FormControl>
<div className='flex items-center gap-2'>
<Input
placeholder='Enter code...'
type='text'
{...field}
value={field.value as string}
/>
<SendCode
type='email'
params={{
...form.getValues(),
type: 2,
}}
/>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
)}
{verify.enable_reset_password_verify && (
<FormField
control={form.control}
@@ -107,7 +114,7 @@ export default function ResetForm({
render={({ field }) => (
<FormItem>
<FormControl>
<CloudFlareTurnstile id='reset' {...field} />
<CloudFlareTurnstile id='reset' {...field} ref={turnstile} />
</FormControl>
<FormMessage />
</FormItem>
+26 -12
View File
@@ -1,26 +1,38 @@
'use client';
import useGlobalStore from '@/config/use-global';
import { useLocale } from 'next-intl';
import { useTheme } from 'next-themes';
import { useEffect } from 'react';
import { forwardRef, useEffect, useImperativeHandle } from 'react';
import Turnstile, { useTurnstile } from 'react-turnstile';
export default function CloudFlareTurnstile({
id,
value,
onChange,
}: {
id?: string;
value?: null | string;
onChange: (value?: string) => void;
}) {
import useGlobalStore from '@/config/use-global';
export type TurnstileRef = {
reset: () => void;
};
const CloudFlareTurnstile = forwardRef<
TurnstileRef,
{
id?: string;
value?: null | string;
onChange: (value?: string) => void;
}
>(function CloudFlareTurnstile({ id, value, onChange }, ref) {
const { common } = useGlobalStore();
const { verify } = common;
const { resolvedTheme } = useTheme();
const locale = useLocale();
const turnstile = useTurnstile();
useImperativeHandle(
ref,
() => ({
reset: () => turnstile.reset(),
}),
[turnstile],
);
useEffect(() => {
if (value === '') {
turnstile.reset();
@@ -51,4 +63,6 @@ export default function CloudFlareTurnstile({
/>
)
);
}
});
export default CloudFlareTurnstile;
+299
View File
@@ -0,0 +1,299 @@
'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { RadioGroup, RadioGroupItem } from '@workspace/ui/components/radio-group';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Sheet,
SheetContent,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@workspace/ui/components/sheet';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
const formSchema = z.object({
title: z.string(),
type: z.enum(['image', 'video']),
content: z.string(),
description: z.string(),
target_url: z.string().url(),
start_time: z.number(),
end_time: z.number(),
});
interface AdsFormProps<T> {
onSubmit: (data: T) => Promise<boolean> | boolean;
initialValues?: T;
loading?: boolean;
trigger: string;
title: string;
}
export default function AdsForm<T extends Record<string, any>>({
onSubmit,
initialValues,
loading,
trigger,
title,
}: AdsFormProps<T>) {
const t = useTranslations('ads');
const [open, setOpen] = useState(false);
const form = useForm({
resolver: zodResolver(formSchema),
defaultValues: {
...initialValues,
} as any,
});
useEffect(() => {
form?.reset(initialValues);
}, [form, initialValues]);
const type = form.watch('type');
const startTime = form.watch('start_time');
const renderContentField = () => {
return (
<FormField
control={form.control}
name='content'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.content')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={
type === 'image'
? 'https://example.com/image.jpg'
: 'https://example.com/video.mp4'
}
value={field.value}
onValueChange={(value) => {
form.setValue('content', value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
);
};
async function handleSubmit(data: { [x: string]: any }) {
const bool = await onSubmit(data as T);
if (bool) setOpen(false);
}
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<Button
onClick={() => {
form.reset();
setOpen(true);
}}
>
{trigger}
</Button>
</SheetTrigger>
<SheetContent className='w-[500px] max-w-full md:max-w-screen-md'>
<SheetHeader>
<SheetTitle>{title}</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100vh-48px-36px-36px-env(safe-area-inset-top))]'>
<Form {...form}>
<form onSubmit={form.handleSubmit(handleSubmit)} className='space-y-4 px-6 pt-4'>
<FormField
control={form.control}
name='title'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.title')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('form.enterTitle')}
value={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='type'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.type')}</FormLabel>
<FormControl>
<RadioGroup
defaultValue={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
className='flex gap-4'
>
<FormItem className='flex items-center space-x-3 space-y-0'>
<FormControl>
<RadioGroupItem value='image' />
</FormControl>
<FormLabel className='font-normal'>{t('form.typeImage')}</FormLabel>
</FormItem>
<FormItem className='flex items-center space-x-3 space-y-0'>
<FormControl>
<RadioGroupItem value='video' />
</FormControl>
<FormLabel className='font-normal'>{t('form.typeVideo')}</FormLabel>
</FormItem>
</RadioGroup>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
{renderContentField()}
<FormField
control={form.control}
name='description'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.description')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('form.enterDescription')}
value={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='target_url'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.targetUrl')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('form.enterTargetUrl')}
value={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='start_time'
render={({ field }) => (
<FormItem>
<FormLabel>{t('form.startTime')}</FormLabel>
<FormControl>
<EnhancedInput
type='datetime-local'
placeholder={t('form.enterStartTime')}
value={field.value ? new Date(field.value).toISOString().slice(0, 16) : ''}
min={Number(new Date().toISOString().slice(0, 16))}
onValueChange={(value) => {
const timestamp = value ? new Date(value).getTime() : 0;
form.setValue(field.name, timestamp);
const endTime = form.getValues('end_time');
if (endTime && timestamp > endTime) {
form.setValue('end_time', '');
}
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='end_time'
render={({ field }) => {
return (
<FormItem>
<FormLabel>{t('form.endTime')}</FormLabel>
<FormControl>
<EnhancedInput
type='datetime-local'
placeholder={t('form.enterEndTime')}
value={
field.value ? new Date(field.value).toISOString().slice(0, 16) : ''
}
min={Number(
startTime
? new Date(startTime).toISOString().slice(0, 16)
: new Date().toISOString().slice(0, 16),
)}
disabled={!startTime}
onValueChange={(value) => {
const timestamp = value ? new Date(value).getTime() : 0;
if (!startTime || timestamp < startTime) return;
form.setValue(field.name, timestamp);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
);
}}
/>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex-row justify-end gap-2 pt-3'>
<Button
variant='outline'
disabled={loading}
onClick={() => {
setOpen(false);
}}
>
{t('form.cancel')}
</Button>
<Button disabled={loading} onClick={form.handleSubmit(handleSubmit)}>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('form.confirm')}
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
);
}
+162
View File
@@ -0,0 +1,162 @@
'use client';
import { ProTable, ProTableActions } from '@/components/pro-table';
import { createAds, deleteAds, getAdsList, updateAds } from '@/services/admin/ads';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button';
import { Switch } from '@workspace/ui/components/switch';
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { useRef, useState } from 'react';
import { toast } from 'sonner';
import AdsForm from './ads-form';
export default function Page() {
const t = useTranslations('ads');
const [loading, setLoading] = useState(false);
const ref = useRef<ProTableActions>(null);
return (
<ProTable<API.Ads, Record<string, unknown>>
action={ref}
header={{
toolbar: (
<AdsForm<API.CreateAdsRequest>
trigger={t('create')}
title={t('createAds')}
loading={loading}
onSubmit={async (values) => {
setLoading(true);
try {
await createAds({
...values,
status: 0,
});
toast.success(t('createSuccess'));
ref.current?.refresh();
setLoading(false);
return true;
} catch (error) {
setLoading(false);
return false;
}
}}
/>
),
}}
params={[
{
key: 'search',
},
{
key: 'status',
placeholder: t('status'),
options: [
{ label: t('enabled'), value: '1' },
{ label: t('disabled'), value: '0' },
],
},
]}
request={async (pagination, filters) => {
const { data } = await getAdsList({
...pagination,
...filters,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
columns={[
{
accessorKey: 'status',
header: t('status'),
cell: ({ row }) => {
return (
<Switch
defaultChecked={row.getValue('status') === 1}
onCheckedChange={async (checked) => {
await updateAds({
...row.original,
status: checked ? 1 : 0,
});
ref.current?.refresh();
}}
/>
);
},
},
{
accessorKey: 'title',
header: t('title'),
},
{
accessorKey: 'type',
header: t('type'),
cell: ({ row }) => {
const type = row.original.type;
return <Badge>{type}</Badge>;
},
},
{
accessorKey: 'target_url',
header: t('targetUrl'),
},
{
accessorKey: 'description',
header: t('form.description'),
},
{
accessorKey: 'period',
header: t('validityPeriod'),
cell: ({ row }) => {
const { start_time, end_time } = row.original;
return (
<>
{formatDate(start_time)} - {formatDate(end_time)}
</>
);
},
},
]}
actions={{
render: (row) => [
<AdsForm<API.UpdateAdsRequest>
key='edit'
trigger={t('edit')}
title={t('editAds')}
loading={loading}
initialValues={row}
onSubmit={async (values) => {
setLoading(true);
try {
await updateAds({ ...row, ...values });
toast.success(t('updateSuccess'));
ref.current?.refresh();
setLoading(false);
return true;
} catch (error) {
setLoading(false);
return false;
}
}}
/>,
<ConfirmButton
key='delete'
trigger={<Button variant='destructive'>{t('delete')}</Button>}
title={t('confirmDelete')}
description={t('deleteWarning')}
onConfirm={async () => {
await deleteAds({ id: row.id });
toast.success(t('deleteSuccess'));
ref.current?.refresh();
}}
cancelText={t('cancel')}
confirmText={t('confirm')}
/>,
],
}}
/>
);
}
@@ -5,7 +5,10 @@ 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 { DicesIcon } from 'lucide-react';
import { useTranslations } from 'next-intl';
import { uid } from 'radash';
import { toast } from 'sonner';
export default function Page() {
@@ -49,6 +52,89 @@ export default function Page() {
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('showAds')}</Label>
<p className='text-muted-foreground text-xs'>{t('showAdsDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Switch
checked={data?.config?.show_ads}
onCheckedChange={(checked) => {
updateConfig('config', {
...data?.config,
show_ads: checked,
});
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('blockVirtualMachine')}</Label>
<p className='text-muted-foreground text-xs'>{t('blockVirtualMachineDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Switch
checked={data?.config?.only_real_device}
onCheckedChange={(checked) => {
updateConfig('config', {
...data?.config,
only_real_device: checked,
});
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('enableSecurity')}</Label>
<p className='text-muted-foreground text-xs'>{t('enableSecurityDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Switch
checked={data?.config?.enable_security}
onCheckedChange={(checked) => {
updateConfig('config', {
...data?.config,
enable_security: checked,
});
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('communicationKey')}</Label>
<p className='text-muted-foreground text-xs'>{t('communicationKeyDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
value={data?.config?.security_secret}
onValueBlur={(value) => {
updateConfig('config', {
...data?.config,
security_secret: value,
});
}}
suffix={
<div className='bg-muted flex h-9 items-center text-nowrap px-3'>
<DicesIcon
onClick={() => {
const id = uid(32).toLowerCase();
const formatted = `${id.slice(0, 8)}-${id.slice(8, 12)}-${id.slice(12, 16)}-${id.slice(16, 20)}-${id.slice(20)}`;
updateConfig('config', {
...data?.config,
security_secret: formatted,
});
}}
className='cursor-pointer'
/>
</div>
}
/>
</TableCell>
</TableRow>
</TableBody>
</Table>
);
@@ -50,7 +50,7 @@ const defaultValues = {
const versionSchema = z.object({
url: z.string(),
version: z.string(),
version: z.string().optional(),
description: z.string().optional(),
is_default: z.boolean().optional(),
});
@@ -221,6 +221,7 @@ export default function SubscribeAppForm<
name: 'version',
type: 'text',
placeholder: t('version'),
defaultValue: '1.0.0',
},
{
name: 'description',
@@ -251,7 +252,10 @@ export default function SubscribeAppForm<
]}
value={field.value}
onChange={(value) => {
form.setValue(field.name, value);
form.setValue(
field.name,
value.filter((item) => item.url),
);
}}
/>
</FormControl>
@@ -92,7 +92,7 @@ export default function SubscribeConfig() {
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('subscriptionDomainPlaceholder')}
placeholder={`${t('subscriptionDomainPlaceholder')}\nexample.com\nwww.example.com`}
defaultValue={data?.subscribe_domain}
onBlur={(e) => {
updateConfig('subscribe_domain', e.target.value);
+5
View File
@@ -1,6 +1,7 @@
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import { getTranslations } from 'next-intl/server';
import Currency from './currency';
import PrivacyPolicy from './privacy-policy';
import Site from './site';
import Tos from './tos';
@@ -13,6 +14,7 @@ export default async function Page() {
<TabsTrigger value='site'>{t('tabs.site')}</TabsTrigger>
<TabsTrigger value='currency'>{t('tabs.currency')}</TabsTrigger>
<TabsTrigger value='tos'>{t('tabs.tos')}</TabsTrigger>
<TabsTrigger value='privacy-policy'>{t('privacy-policy.title')}</TabsTrigger>
</TabsList>
<TabsContent value='site'>
<Site />
@@ -23,6 +25,9 @@ export default async function Page() {
<TabsContent value='tos'>
<Tos />
</TabsContent>
<TabsContent value='privacy-policy'>
<PrivacyPolicy />
</TabsContent>
</Tabs>
);
}
@@ -0,0 +1,48 @@
'use client';
import { getPrivacyPolicyConfig, updatePrivacyPolicyConfig } from '@/services/admin/system';
import { useQuery } from '@tanstack/react-query';
import { MarkdownEditor } from '@workspace/ui/custom-components/editor';
import { useTranslations } from 'next-intl';
import { toast } from 'sonner';
export default function PrivacyPolicy() {
const t = useTranslations('system.privacy-policy');
const { data, refetch, isFetched } = useQuery({
queryKey: ['getPrivacyPolicyConfig'],
queryFn: async () => {
const { data } = await getPrivacyPolicyConfig();
return data.data;
},
});
async function updateConfig(key: string, value: unknown) {
if (data?.[key] === value) return;
try {
await updatePrivacyPolicyConfig({
...data,
[key]: value,
} as API.PrivacyPolicyConfig);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
/* empty */
}
}
return (
isFetched && (
<div className='h-[calc(100dvh-132px-env(safe-area-inset-top))] overflow-hidden'>
<MarkdownEditor
title={t('title')}
value={data?.privacy_policy}
onBlur={(value) => {
if (data?.privacy_policy !== value) {
updateConfig('privacy_policy', value);
}
}}
/>
</div>
)
);
}
+30 -1
View File
@@ -85,6 +85,35 @@ export default function Site() {
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('keywords')}</Label>
<p className='text-muted-foreground text-xs'>{t('keywordsDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
placeholder={t('keywordsDescription')}
value={data?.keywords}
onValueBlur={(value) => updateConfig('keywords', value)}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('customHtml')}</Label>
<p className='text-muted-foreground text-xs'>{t('customHtmlDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('customHtmlDescription')}
defaultValue={data?.custom_html}
onBlur={(e) => {
updateConfig('custom_html', e.target.value);
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('siteDomain')}</Label>
@@ -93,7 +122,7 @@ export default function Site() {
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={t('siteDomainPlaceholder')}
placeholder={`${t('siteDomainPlaceholder')}\nexample.com\nwww.example.com`}
defaultValue={data?.host}
onBlur={(e) => {
updateConfig('host', e.target.value);
+29 -4
View File
@@ -11,13 +11,38 @@ import {
} from '@workspace/ui/components/select';
import { Icon } from '@workspace/ui/custom-components/icon';
import { getCountry } from '@workspace/ui/utils';
import { useLocale, useTranslations } from 'next-intl';
import { useLocale } from 'next-intl';
import { useRouter } from 'next/navigation';
const languages = {
'cs-CZ': 'Čeština',
'de-DE': 'Deutsch',
'en-US': 'English',
'es-ES': 'Español',
'es-MX': 'Español (México)',
'fa-IR': 'فارسی',
'fi-FI': 'Suomi',
'fr-FR': 'Français',
'hi-IN': 'हिन्दी',
'hu-HU': 'Magyar',
'ja-JP': '日本語',
'ko-KR': '한국어',
'no-NO': 'Norsk',
'pl-PL': 'Polski',
'pt-BR': 'Português (Brasil)',
'ro-RO': 'Română',
'ru-RU': 'Русский',
'th-TH': 'ไทย',
'tr-TR': 'Türkçe',
'uk-UA': 'Українська',
'vi-VN': 'Tiếng Việt',
'zh-CN': '简体中文',
'zh-HK': '繁體中文',
} as const;
export default function LanguageSwitch() {
const locale = useLocale();
const country = getCountry(locale);
const t = useTranslations('language');
const router = useRouter();
const handleLanguageChange = (value: string) => {
@@ -31,7 +56,7 @@ export default function LanguageSwitch() {
<SelectValue>
<div className='flex items-center'>
<Icon icon={`flagpack:${country?.alpha2.toLowerCase()}`} className='!size-5' />
<span className='sr-only'>{t(`${locale}`)}</span>
<span className='sr-only'>{languages[locale as keyof typeof languages]}</span>
</div>
</SelectValue>
</SelectTrigger>
@@ -40,7 +65,7 @@ export default function LanguageSwitch() {
<SelectItem key={`${item?.lang}-${item?.alpha2}`} value={`${item?.lang}-${item?.alpha2}`}>
<div className='flex items-center gap-2'>
<Icon icon={`flagpack:${item?.alpha2.toLowerCase()}`} className='!size-5' />
{t(`${item?.lang}-${item?.alpha2}`)}
{languages[`${item?.lang}-${item?.alpha2}` as keyof typeof languages]}
</div>
</SelectItem>
))}
+6 -1
View File
@@ -61,6 +61,11 @@ export const navs = [
icon: 'flat-color-icons:lock-portrait',
items: AuthControl,
},
{
title: 'ADS Config',
url: '/dashboard/ads',
icon: 'flat-color-icons:electrical-sensor',
},
{
title: 'Payment Config',
url: '/dashboard/payment',
@@ -115,7 +120,7 @@ export const navs = [
{
title: 'Announcement Management',
url: '/dashboard/announcement',
icon: 'flat-color-icons:news',
icon: 'flat-color-icons:advertising',
},
{
title: 'Ticket Management',
+2
View File
@@ -14,6 +14,8 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
site_name: '',
site_desc: '',
site_logo: '',
keywords: '',
custom_html: '',
},
verify: {
turnstile_site_key: '',
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Zrušit",
"confirm": "Potvrdit",
"confirmDelete": "Potvrdit smazání",
"create": "Vytvořit inzerát",
"createAds": "Vytvořit reklamu",
"createSuccess": "Úspěšně vytvořeno",
"delete": "Smazat",
"deleteSuccess": "Úspěšně smazáno",
"deleteWarning": "Opravdu chcete smazat tento inzerát?",
"disabled": "Deaktivováno",
"edit": "Upravit",
"editAds": "Upravit reklamu",
"enabled": "Aktivováno",
"form": {
"cancel": "Zrušit",
"confirm": "Potvrdit",
"content": "Obsah",
"description": "Popis",
"endTime": "Čas ukončení",
"enterContent": "Prosím zadejte obsah inzerátu",
"enterDescription": "Prosím zadejte popis inzerátu",
"enterEndTime": "Prosím vyberte čas ukončení",
"enterStartTime": "Prosím vyberte čas zahájení",
"enterTargetUrl": "Prosím zadejte cílovou URL",
"enterTitle": "Prosím zadejte název inzerátu",
"startTime": "Čas zahájení",
"targetUrl": "Cílová URL",
"title": "Název",
"type": "Typ inzerátu",
"typeImage": "Obrázek",
"typeVideo": "Video"
},
"status": "Stav",
"targetUrl": "Cílová URL",
"title": "Název",
"type": "Typ",
"updateSuccess": "Úspěšně aktualizováno",
"validityPeriod": "Doba platnosti"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Blokovat virtuální stroj",
"blockVirtualMachineDescription": "Pokud je povoleno, zařízení nebudou moci běžet na virtuálních strojích nebo emulátorech",
"communicationKey": "Komunikační klíč",
"communicationKeyDescription": "Komunikační klíč se používá pro bezpečnou komunikaci mezi zařízeními a servery",
"enable": "Povolit",
"enableDescription": "Po povolení jsou podporovány různé identifikátory zařízení, jako jsou IMEI/IDFA/IDFV/AndroidID/Mac adresa pro přihlášení a registraci"
"enableDescription": "Po povolení jsou podporovány různé identifikátory zařízení, jako jsou IMEI/IDFA/IDFV/AndroidID/Mac adresa pro přihlášení a registraci",
"enableSecurity": "Povolit šifrování komunikace",
"enableSecurityDescription": "Pokud je povoleno, komunikace mezi zařízeními a servery bude šifrována",
"saveFailed": "Uložení se nezdařilo",
"saveSuccess": "Uložení bylo úspěšné",
"showAds": "Zobrazit reklamy",
"showAdsDescription": "Pokud je povoleno, na zařízeních se budou zobrazovat reklamy"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "čeština",
"de-DE": "němčina",
"en-US": "angličtina",
"es-ES": "španělština",
"es-MX": "španělština (Mexiko)",
"fa-IR": "Perština",
"fi-FI": "finština",
"fr-FR": "Francouzština",
"hi-IN": "hindština",
"hu-HU": "maďarština",
"ja-JP": "Japonština",
"ko-KR": "Korejština",
"no-NO": "norština",
"pl-PL": "polština",
"pt-BR": "portugalština (Brazílie)",
"ro-RO": "rumunština",
"ru-RU": "ruština",
"th-TH": "thajština",
"tr-TR": "turečtina",
"uk-UA": "Ukrajinština",
"vi-VN": "Vietnamština",
"zh-CN": "čeština (CS)",
"zh-HK": "čínština (tradiční)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Konfigurace ADS",
"Announcement Management": "Správa oznámení",
"Apple": "Apple ID",
"Auth Control": "Řízení ověřování",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Pouze pro zobrazení, po změně se změní všechny měnové jednotky v systému",
"saveSuccess": "Úspěšně uloženo"
},
"privacy-policy": {
"saveSuccess": "Uložení bylo úspěšné",
"title": "Zásady ochrany osobních údajů"
},
"site": {
"customHtml": "Vlastní HTML",
"customHtmlDescription": "Vlastní HTML kód, který bude vložen na konec tagu body na stránce.",
"keywords": "Klíčová slova",
"keywordsDescription": "Používá se pro SEO účely",
"logo": "LOGO",
"logoDescription": "Používá se k zobrazení místa, kde je potřeba zobrazit LOGO",
"logoPlaceholder": "Zadejte URL adresu LOGA, nekončete '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen",
"create": "Anzeige erstellen",
"createAds": "Anzeige erstellen",
"createSuccess": "Erfolgreich erstellt",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Sind Sie sicher, dass Sie diese Anzeige löschen möchten?",
"disabled": "Deaktiviert",
"edit": "Bearbeiten",
"editAds": "Anzeige bearbeiten",
"enabled": "Aktiviert",
"form": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"content": "Inhalt",
"description": "Beschreibung",
"endTime": "Endzeit",
"enterContent": "Bitte geben Sie den Anzeigeninhalt ein",
"enterDescription": "Bitte geben Sie die Anzeigenbeschreibung ein",
"enterEndTime": "Bitte wählen Sie die Endzeit aus",
"enterStartTime": "Bitte wählen Sie die Startzeit aus",
"enterTargetUrl": "Bitte geben Sie die Ziel-URL ein",
"enterTitle": "Bitte geben Sie den Anzeigentitel ein",
"startTime": "Startzeit",
"targetUrl": "Ziel-URL",
"title": "Titel",
"type": "Anzeigentyp",
"typeImage": "Bild",
"typeVideo": "Video"
},
"status": "Status",
"targetUrl": "Ziel-URL",
"title": "Titel",
"type": "Typ",
"updateSuccess": "Erfolgreich aktualisiert",
"validityPeriod": "Gültigkeitsdauer"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Virtuelle Maschine blockieren",
"blockVirtualMachineDescription": "Wenn aktiviert, wird verhindert, dass Geräte auf virtuellen Maschinen oder Emulatoren ausgeführt werden.",
"communicationKey": "Kommunikationsschlüssel",
"communicationKeyDescription": "Der Kommunikationsschlüssel wird für die sichere Kommunikation zwischen Geräten und Servern verwendet.",
"enable": "Aktivieren",
"enableDescription": "Nach der Aktivierung werden mehrere Geräteidentifikatoren wie IMEI/IDFA/IDFV/AndroidID/Mac-Adresse für die Anmeldung und Registrierung unterstützt."
"enableDescription": "Nach der Aktivierung werden mehrere Geräteidentifikatoren wie IMEI/IDFA/IDFV/AndroidID/Mac-Adresse für die Anmeldung und Registrierung unterstützt.",
"enableSecurity": "Kommunikationsverschlüsselung aktivieren",
"enableSecurityDescription": "Wenn aktiviert, wird die Kommunikation zwischen Geräten und Servern verschlüsselt.",
"saveFailed": "Speichern fehlgeschlagen",
"saveSuccess": "Speichern erfolgreich",
"showAds": "Werbung anzeigen",
"showAdsDescription": "Wenn aktiviert, werden auf den Geräten Anzeigen angezeigt."
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tschechisch",
"de-DE": "Deutsch",
"en-US": "Englisch",
"es-ES": "Spanisch",
"es-MX": "Spanisch (Mexiko)",
"fa-IR": "Persisch",
"fi-FI": "Finnisch",
"fr-FR": "Französisch",
"hi-IN": "Hindi",
"hu-HU": "Ungarisch",
"ja-JP": "Japanisch",
"ko-KR": "Koreanisch",
"no-NO": "Norwegisch",
"pl-PL": "Polnisch",
"pt-BR": "Portugiesisch (Brasilien)",
"ro-RO": "Rumänisch",
"ru-RU": "Russisch",
"th-TH": "Thailändisch",
"tr-TR": "Türkisch",
"uk-UA": "Ukrainisch",
"vi-VN": "Vietnamesisch",
"zh-CN": "Chinesisch (vereinfacht)",
"zh-HK": "Chinesisch (Traditionell)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS-Konfiguration",
"Announcement Management": "Ankündigungsverwaltung",
"Apple": "Apple-ID",
"Auth Control": "Authentifizierungskontrolle",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Nur zur Anzeige verwendet, nach der Änderung werden alle Währungseinheiten im System geändert",
"saveSuccess": "Erfolgreich gespeichert"
},
"privacy-policy": {
"saveSuccess": "Erfolgreich gespeichert",
"title": "Datenschutzrichtlinie"
},
"site": {
"customHtml": "Benutzerdefiniertes HTML",
"customHtmlDescription": "Benutzerdefinierter HTML-Code, der am Ende des body-Tags der Seite eingefügt werden soll.",
"keywords": "Schlüsselwörter",
"keywordsDescription": "Für SEO-Zwecke verwendet",
"logo": "LOGO",
"logoDescription": "Position zur Anzeige des LOGOs",
"logoPlaceholder": "Bitte geben Sie die URL-Adresse des LOGOs ein, ohne '/' am Ende",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Confirm Delete",
"create": "Create Ad",
"createAds": "Create Advertisement",
"createSuccess": "Successfully created",
"delete": "Delete",
"deleteSuccess": "Successfully deleted",
"deleteWarning": "Are you sure you want to delete this ad?",
"disabled": "Disabled",
"edit": "Edit",
"editAds": "Edit Advertisement",
"enabled": "Enabled",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"content": "Content",
"description": "Description",
"endTime": "End Time",
"enterContent": "Please enter ad content",
"enterDescription": "Please enter ad description",
"enterEndTime": "Please select end time",
"enterStartTime": "Please select start time",
"enterTargetUrl": "Please enter target URL",
"enterTitle": "Please enter ad title",
"startTime": "Start Time",
"targetUrl": "Target URL",
"title": "Title",
"type": "Ad Type",
"typeImage": "Image",
"typeVideo": "Video"
},
"status": "Status",
"targetUrl": "Target URL",
"title": "Title",
"type": "Type",
"updateSuccess": "Successfully updated",
"validityPeriod": "Validity Period"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Block Virtual Machine",
"blockVirtualMachineDescription": "When enabled, devices will be prevented from running on virtual machines or emulators",
"communicationKey": "Communication Key",
"communicationKeyDescription": "Communication key is used for secure communication between devices and servers",
"enable": "Enable",
"enableDescription": "After enabling, multiple device identifiers such as IMEI/IDFA/IDFV/AndroidID/Mac address are supported for login and registration"
"enableDescription": "After enabling, multiple device identifiers such as IMEI/IDFA/IDFV/AndroidID/Mac address are supported for login and registration",
"enableSecurity": "Enable Communication Encryption",
"enableSecurityDescription": "When enabled, the communication between devices and servers will be encrypted",
"saveFailed": "Save failed",
"saveSuccess": "Save successful",
"showAds": "Show Advertisements",
"showAdsDescription": "When enabled, advertisements will be displayed on devices"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Czech",
"de-DE": "German",
"en-US": "English",
"es-ES": "Spanish",
"es-MX": "Spanish (Mexico)",
"fa-IR": "Persian",
"fi-FI": "Finnish",
"fr-FR": "French",
"hi-IN": "Hindi",
"hu-HU": "Hungarian",
"ja-JP": "Japanese",
"ko-KR": "Korean",
"no-NO": "Norwegian",
"pl-PL": "Polish",
"pt-BR": "Portuguese (Brazil)",
"ro-RO": "Romanian",
"ru-RU": "Russian",
"th-TH": "Thai",
"tr-TR": "Turkish",
"uk-UA": "Ukrainian",
"vi-VN": "Vietnamese",
"zh-CN": "Chinese (Simplified)",
"zh-HK": "Chinese (Traditional)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS Config",
"Announcement Management": "Announcement Management",
"Apple": "Apple ID",
"Auth Control": "Auth Control",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Used for display purposes only; changing this will affect all currency units in the system",
"saveSuccess": "Save Successful"
},
"privacy-policy": {
"saveSuccess": "Save Successful",
"title": "Privacy Policy"
},
"site": {
"customHtml": "Custom HTML",
"customHtmlDescription": "Custom HTML code to be injected into the bottom of the site's body tag.",
"keywords": "Keywords",
"keywordsDescription": "Used for SEO purposes",
"logo": "Logo",
"logoDescription": "Used for displaying the logo in designated locations",
"logoPlaceholder": "Enter the URL of the logo, without ending with '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Confirmar eliminación",
"create": "Crear anuncio",
"createAds": "Crear publicidad",
"createSuccess": "Creado con éxito",
"delete": "Eliminar",
"deleteSuccess": "Eliminado con éxito",
"deleteWarning": "¿Está seguro de que desea eliminar este anuncio?",
"disabled": "Deshabilitado",
"edit": "Editar",
"editAds": "Editar publicidad",
"enabled": "Habilitado",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"content": "Contenido",
"description": "Descripción",
"endTime": "Hora de finalización",
"enterContent": "Por favor, introduzca el contenido del anuncio",
"enterDescription": "Por favor, introduzca la descripción del anuncio",
"enterEndTime": "Por favor, seleccione la hora de finalización",
"enterStartTime": "Por favor, seleccione la hora de inicio",
"enterTargetUrl": "Por favor, introduzca la URL de destino",
"enterTitle": "Por favor, introduzca el título del anuncio",
"startTime": "Hora de inicio",
"targetUrl": "URL de destino",
"title": "Título",
"type": "Tipo de anuncio",
"typeImage": "Imagen",
"typeVideo": "Vídeo"
},
"status": "Estado",
"targetUrl": "URL de destino",
"title": "Título",
"type": "Tipo",
"updateSuccess": "Actualizado con éxito",
"validityPeriod": "Período de validez"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Bloquear Máquina Virtual",
"blockVirtualMachineDescription": "Cuando está habilitado, se evitará que los dispositivos se ejecuten en máquinas virtuales o emuladores",
"communicationKey": "Clave de Comunicación",
"communicationKeyDescription": "La clave de comunicación se utiliza para la comunicación segura entre dispositivos y servidores",
"enable": "Habilitar",
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección MAC para el inicio de sesión y el registro"
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección MAC para el inicio de sesión y el registro",
"enableSecurity": "Habilitar Cifrado de Comunicación",
"enableSecurityDescription": "Cuando está habilitado, la comunicación entre dispositivos y servidores será cifrada",
"saveFailed": "Error al guardar",
"saveSuccess": "Guardado exitoso",
"showAds": "Mostrar Anuncios",
"showAdsDescription": "Cuando está habilitado, se mostrarán anuncios en los dispositivos"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Checo",
"de-DE": "Alemán",
"en-US": "inglés",
"es-ES": "español",
"es-MX": "Español (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandés",
"fr-FR": "Francés",
"hi-IN": "hindi",
"hu-HU": "húngaro",
"ja-JP": "Japonés",
"ko-KR": "Coreano",
"no-NO": "Noruego",
"pl-PL": "Polaco",
"pt-BR": "portugués (Brasil)",
"ro-RO": "Rumano",
"ru-RU": "Ruso",
"th-TH": "Tailandés",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "Español (España)",
"zh-HK": "chino (tradicional)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Configuración de ADS",
"Announcement Management": "Gestión de Anuncios",
"Apple": "ID de Apple",
"Auth Control": "Control de Autenticación",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Solo para uso de visualización, al cambiarlo se modificarán todas las unidades monetarias en el sistema",
"saveSuccess": "Guardado exitosamente"
},
"privacy-policy": {
"saveSuccess": "Guardado con éxito",
"title": "Política de Privacidad"
},
"site": {
"customHtml": "HTML personalizado",
"customHtmlDescription": "Código HTML personalizado que se inyectará en la parte inferior de la etiqueta body del sitio.",
"keywords": "Palabras clave",
"keywordsDescription": "Utilizado para fines de SEO",
"logo": "LOGO",
"logoDescription": "Se utiliza para mostrar la ubicación donde se debe mostrar el LOGO",
"logoPlaceholder": "Por favor, introduce la URL del LOGO, no termines con '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Eliminación",
"create": "Crear Anuncio",
"createAds": "Crear Publicidad",
"createSuccess": "Creado con éxito",
"delete": "Eliminar",
"deleteSuccess": "Eliminado con éxito",
"deleteWarning": "¿Está seguro de que desea eliminar este anuncio?",
"disabled": "Deshabilitado",
"edit": "Editar",
"editAds": "Editar Publicidad",
"enabled": "Habilitado",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"content": "Contenido",
"description": "Descripción",
"endTime": "Hora de Finalización",
"enterContent": "Por favor ingrese el contenido del anuncio",
"enterDescription": "Por favor ingrese la descripción del anuncio",
"enterEndTime": "Por favor seleccione la hora de finalización",
"enterStartTime": "Por favor seleccione la hora de inicio",
"enterTargetUrl": "Por favor ingrese la URL de destino",
"enterTitle": "Por favor ingrese el título del anuncio",
"startTime": "Hora de Inicio",
"targetUrl": "URL de Destino",
"title": "Título",
"type": "Tipo de Anuncio",
"typeImage": "Imagen",
"typeVideo": "Video"
},
"status": "Estado",
"targetUrl": "URL de Destino",
"title": "Título",
"type": "Tipo",
"updateSuccess": "Actualizado con éxito",
"validityPeriod": "Período de Validez"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Bloquear Máquina Virtual",
"blockVirtualMachineDescription": "Cuando está habilitado, se evitará que los dispositivos se ejecuten en máquinas virtuales o emuladores",
"communicationKey": "Clave de Comunicación",
"communicationKeyDescription": "La clave de comunicación se utiliza para la comunicación segura entre dispositivos y servidores",
"enable": "Habilitar",
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección Mac para iniciar sesión y registrarse"
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección Mac para iniciar sesión y registrarse",
"enableSecurity": "Habilitar Cifrado de Comunicación",
"enableSecurityDescription": "Cuando está habilitado, la comunicación entre dispositivos y servidores será cifrada",
"saveFailed": "Error al guardar",
"saveSuccess": "Guardado exitoso",
"showAds": "Mostrar Anuncios",
"showAdsDescription": "Cuando está habilitado, se mostrarán anuncios en los dispositivos"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Checo",
"de-DE": "Alemán",
"en-US": "inglés",
"es-ES": "español",
"es-MX": "Español (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandés",
"fr-FR": "Francés",
"hi-IN": "Hindi",
"hu-HU": "Húngaro",
"ja-JP": "Japonés",
"ko-KR": "Coreano",
"no-NO": "Noruego",
"pl-PL": "Polaco",
"pt-BR": "portugués (Brasil)",
"ro-RO": "Rumano",
"ru-RU": "Ruso",
"th-TH": "Tailandés",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "español (México)",
"zh-HK": "Chino (Tradicional)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Configuración de ADS",
"Announcement Management": "Gestión de Anuncios",
"Apple": "ID de Apple",
"Auth Control": "Control de Autenticación",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Solo para fines de visualización, cambiarlo alterará todas las unidades monetarias en el sistema",
"saveSuccess": "Guardado exitosamente"
},
"privacy-policy": {
"saveSuccess": "Guardado exitoso",
"title": "Política de Privacidad"
},
"site": {
"customHtml": "HTML personalizado",
"customHtmlDescription": "Código HTML personalizado que se inyectará al final de la etiqueta body del sitio.",
"keywords": "Palabras clave",
"keywordsDescription": "Utilizado para propósitos de SEO",
"logo": "LOGO",
"logoDescription": "Usado para mostrar la ubicación donde se debe exhibir el LOGO",
"logoPlaceholder": "Por favor, ingresa la URL del LOGO, no termines con '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "لغو",
"confirm": "تأیید",
"confirmDelete": "تأیید حذف",
"create": "ایجاد آگهی",
"createAds": "ایجاد تبلیغ",
"createSuccess": "با موفقیت ایجاد شد",
"delete": "حذف",
"deleteSuccess": "با موفقیت حذف شد",
"deleteWarning": "آیا مطمئن هستید که می‌خواهید این آگهی را حذف کنید؟",
"disabled": "غیرفعال",
"edit": "ویرایش",
"editAds": "ویرایش تبلیغ",
"enabled": "فعال",
"form": {
"cancel": "لغو",
"confirm": "تأیید",
"content": "محتوا",
"description": "توضیحات",
"endTime": "زمان پایان",
"enterContent": "لطفاً محتوای آگهی را وارد کنید",
"enterDescription": "لطفاً توضیحات آگهی را وارد کنید",
"enterEndTime": "لطفاً زمان پایان را انتخاب کنید",
"enterStartTime": "لطفاً زمان شروع را انتخاب کنید",
"enterTargetUrl": "لطفاً URL هدف را وارد کنید",
"enterTitle": "لطفاً عنوان آگهی را وارد کنید",
"startTime": "زمان شروع",
"targetUrl": "URL هدف",
"title": "عنوان",
"type": "نوع آگهی",
"typeImage": "تصویر",
"typeVideo": "ویدیو"
},
"status": "وضعیت",
"targetUrl": "URL هدف",
"title": "عنوان",
"type": "نوع",
"updateSuccess": "با موفقیت به‌روزرسانی شد",
"validityPeriod": "مدت اعتبار"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "مسدود کردن ماشین مجازی",
"blockVirtualMachineDescription": "هنگامی که فعال باشد، دستگاه‌ها از اجرای ماشین‌های مجازی یا شبیه‌سازها جلوگیری خواهند شد",
"communicationKey": "کلید ارتباطی",
"communicationKeyDescription": "کلید ارتباطی برای ارتباط امن بین دستگاه‌ها و سرورها استفاده می‌شود",
"enable": "فعال کردن",
"enableDescription": "پس از فعال‌سازی، شناسه‌های دستگاه‌های مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبت‌نام پشتیبانی می‌شوند"
"enableDescription": "پس از فعال‌سازی، شناسه‌های دستگاه‌های مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبت‌نام پشتیبانی می‌شوند",
"enableSecurity": "فعال‌سازی رمزنگاری ارتباطات",
"enableSecurityDescription": "هنگامی که فعال باشد، ارتباط بین دستگاه‌ها و سرورها رمزنگاری خواهد شد",
"saveFailed": "ذخیره‌سازی ناموفق بود",
"saveSuccess": "ذخیره‌سازی با موفقیت انجام شد",
"showAds": "نمایش تبلیغات",
"showAdsDescription": "هنگامی که فعال باشد، تبلیغات بر روی دستگاه‌ها نمایش داده خواهد شد"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "چکی",
"de-DE": "آلمانی",
"en-US": "انگلیسی",
"es-ES": "اسپانیایی",
"es-MX": "اسپانیایی (مکزیک)",
"fa-IR": "فارسی",
"fi-FI": "فنلاندی",
"fr-FR": "فرانسوی",
"hi-IN": "هندی",
"hu-HU": "مجاری",
"ja-JP": "ژاپنی",
"ko-KR": "کره‌ای",
"no-NO": "نروژی",
"pl-PL": "لهستانی",
"pt-BR": "پرتغالی (برزیل)",
"ro-RO": "رومانیایی",
"ru-RU": "روسی",
"th-TH": "تایلندی",
"tr-TR": "ترکی",
"uk-UA": "اوکراینی",
"vi-VN": "ویتنامی",
"zh-CN": "چینی (ساده شده)",
"zh-HK": "چینی (سنتی)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "تنظیمات ADS",
"Announcement Management": "مدیریت اطلاعیه‌ها",
"Apple": "شناسه اپل",
"Auth Control": "کنترل احراز هویت",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "فقط برای نمایش استفاده می‌شود؛ تغییر این مورد بر تمام واحدهای ارزی در سیستم تأثیر خواهد گذاشت",
"saveSuccess": "ذخیره‌سازی موفقیت‌آمیز"
},
"privacy-policy": {
"saveSuccess": "ذخیره با موفقیت انجام شد",
"title": "سیاست حفظ حریم خصوصی"
},
"site": {
"customHtml": "HTML سفارشی",
"customHtmlDescription": "کد HTML سفارشی که باید در انتهای تگ body سایت وارد شود.",
"keywords": "کلمات کلیدی",
"keywordsDescription": "برای اهداف سئو استفاده می‌شود",
"logo": "لوگو",
"logoDescription": "برای نمایش لوگو در مکان‌های تعیین‌شده استفاده می‌شود",
"logoPlaceholder": "آدرس URL لوگو را وارد کنید، بدون '/' در انتها",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Peruuta",
"confirm": "Vahvista",
"confirmDelete": "Vahvista poisto",
"create": "Luo ilmoitus",
"createAds": "Luo mainos",
"createSuccess": "Luonti onnistui",
"delete": "Poista",
"deleteSuccess": "Poisto onnistui",
"deleteWarning": "Oletko varma, että haluat poistaa tämän ilmoituksen?",
"disabled": "Pois käytöstä",
"edit": "Muokkaa",
"editAds": "Muokkaa mainosta",
"enabled": "Käytössä",
"form": {
"cancel": "Peruuta",
"confirm": "Vahvista",
"content": "Sisältö",
"description": "Kuvaus",
"endTime": "Loppuaika",
"enterContent": "Ole hyvä ja syötä mainoksen sisältö",
"enterDescription": "Ole hyvä ja syötä mainoksen kuvaus",
"enterEndTime": "Ole hyvä ja valitse loppuaika",
"enterStartTime": "Ole hyvä ja valitse aloitusaika",
"enterTargetUrl": "Ole hyvä ja syötä kohde-URL",
"enterTitle": "Ole hyvä ja syötä mainoksen otsikko",
"startTime": "Aloitusaika",
"targetUrl": "Kohde-URL",
"title": "Otsikko",
"type": "Mainostyyppi",
"typeImage": "Kuva",
"typeVideo": "Video"
},
"status": "Tila",
"targetUrl": "Kohde-URL",
"title": "Otsikko",
"type": "Tyyppi",
"updateSuccess": "Päivitys onnistui",
"validityPeriod": "Voimassaoloaika"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Estä virtuaalikone",
"blockVirtualMachineDescription": "Kun tämä on käytössä, laitteiden käyttö virtuaalikoneissa tai emulaattoreissa estetään",
"communicationKey": "Viestintäavain",
"communicationKeyDescription": "Viestintäavain käytetään turvalliseen viestintään laitteiden ja palvelimien välillä",
"enable": "Ota käyttöön",
"enableDescription": "Kun otat käyttöön, useita laiteidentifikaattoreita, kuten IMEI/IDFA/IDFV/AndroidID/Mac-osoite, tuetaan kirjautumiseen ja rekisteröitymiseen."
"enableDescription": "Kun otat käyttöön, useita laiteidentifikaattoreita, kuten IMEI/IDFA/IDFV/AndroidID/Mac-osoite, tuetaan kirjautumiseen ja rekisteröitymiseen.",
"enableSecurity": "Ota käyttöön viestinnän salaus",
"enableSecurityDescription": "Kun tämä on käytössä, laitteiden ja palvelimien välinen viestintä salataan",
"saveFailed": "Tallennus epäonnistui",
"saveSuccess": "Tallennus onnistui",
"showAds": "Näytä mainoksia",
"showAdsDescription": "Kun tämä on käytössä, mainoksia näytetään laitteilla"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "tšekki",
"de-DE": "Saksa",
"en-US": "englanti",
"es-ES": "espanja",
"es-MX": "espanja (Meksiko)",
"fa-IR": "Persia",
"fi-FI": "suomi",
"fr-FR": "ranska",
"hi-IN": "hindi",
"hu-HU": "unkarinkieli",
"ja-JP": "japani",
"ko-KR": "Korea",
"no-NO": "norja",
"pl-PL": "puola",
"pt-BR": "portugali (Brasilia)",
"ro-RO": "romania",
"ru-RU": "Venäjä",
"th-TH": "thaikieli",
"tr-TR": "turkki",
"uk-UA": "ukrainaksi",
"vi-VN": "vietnamiksi",
"zh-CN": "kiina (yksinkertaistettu)",
"zh-HK": "kiina (perinteinen)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS-asetukset",
"Announcement Management": "Ilmoitusten hallinta",
"Apple": "Apple ID",
"Auth Control": "Todennuksen hallinta",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Käytetään vain näyttötarkoituksiin, muutoksen jälkeen kaikki järjestelmän valuuttayksiköt muuttuvat",
"saveSuccess": "Tallennus onnistui"
},
"privacy-policy": {
"saveSuccess": "Tallennus onnistui",
"title": "Tietosuojakäytäntö"
},
"site": {
"customHtml": "Mukautettu HTML",
"customHtmlDescription": "Mukautettu HTML-koodi, joka lisätään sivuston body -tagin loppuun.",
"keywords": "Avainsanat",
"keywordsDescription": "Käytetään SEO-tarkoituksiin",
"logo": "LOGO",
"logoDescription": "Näyttääksesi paikan, jossa LOGO tulee näkyä",
"logoPlaceholder": "Syötä LOGO:n URL-osoite, älä lopeta '/'-merkillä",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression",
"create": "Créer une annonce",
"createAds": "Créer une publicité",
"createSuccess": "Créé avec succès",
"delete": "Supprimer",
"deleteSuccess": "Supprimé avec succès",
"deleteWarning": "Êtes-vous sûr de vouloir supprimer cette annonce ?",
"disabled": "Désactivé",
"edit": "Modifier",
"editAds": "Modifier la publicité",
"enabled": "Activé",
"form": {
"cancel": "Annuler",
"confirm": "Confirmer",
"content": "Contenu",
"description": "Description",
"endTime": "Heure de fin",
"enterContent": "Veuillez entrer le contenu de l'annonce",
"enterDescription": "Veuillez entrer la description de l'annonce",
"enterEndTime": "Veuillez sélectionner l'heure de fin",
"enterStartTime": "Veuillez sélectionner l'heure de début",
"enterTargetUrl": "Veuillez entrer l'URL cible",
"enterTitle": "Veuillez entrer le titre de l'annonce",
"startTime": "Heure de début",
"targetUrl": "URL cible",
"title": "Titre",
"type": "Type d'annonce",
"typeImage": "Image",
"typeVideo": "Vidéo"
},
"status": "Statut",
"targetUrl": "URL cible",
"title": "Titre",
"type": "Type",
"updateSuccess": "Mis à jour avec succès",
"validityPeriod": "Période de validité"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Bloquer la machine virtuelle",
"blockVirtualMachineDescription": "Lorsqu'il est activé, les appareils seront empêchés de fonctionner sur des machines virtuelles ou des émulateurs",
"communicationKey": "Clé de communication",
"communicationKeyDescription": "La clé de communication est utilisée pour une communication sécurisée entre les appareils et les serveurs",
"enable": "Activer",
"enableDescription": "Après activation, plusieurs identifiants de périphériques tels que IMEI/IDFA/IDFV/AndroidID/adresse Mac sont pris en charge pour la connexion et l'enregistrement"
"enableDescription": "Après activation, plusieurs identifiants de périphériques tels que IMEI/IDFA/IDFV/AndroidID/adresse Mac sont pris en charge pour la connexion et l'enregistrement",
"enableSecurity": "Activer le chiffrement de la communication",
"enableSecurityDescription": "Lorsqu'il est activé, la communication entre les appareils et les serveurs sera chiffrée",
"saveFailed": "Échec de l'enregistrement",
"saveSuccess": "Enregistrement réussi",
"showAds": "Afficher les publicités",
"showAdsDescription": "Lorsqu'il est activé, des publicités seront affichées sur les appareils"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tchèque",
"de-DE": "Allemand",
"en-US": "anglais",
"es-ES": "Espagnol",
"es-MX": "Espagnol (Mexique)",
"fa-IR": "Persan",
"fi-FI": "finnois",
"fr-FR": "français",
"hi-IN": "hindi",
"hu-HU": "Hongrois",
"ja-JP": "Japonais",
"ko-KR": "coréen",
"no-NO": "Norvégien",
"pl-PL": "Polonais",
"pt-BR": "portugais (Brésil)",
"ro-RO": "Roumain",
"ru-RU": "Russe",
"th-TH": "thaïlandais",
"tr-TR": "turc",
"uk-UA": "Ukrainien",
"vi-VN": "Vietnamien",
"zh-CN": "français (France)",
"zh-HK": "chinois (traditionnel)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Configuration ADS",
"Announcement Management": "Gestion des annonces",
"Apple": "Identifiant Apple",
"Auth Control": "Contrôle d'authentification",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Utilisé uniquement pour l'affichage, toute modification entraînera un changement de toutes les unités monétaires dans le système",
"saveSuccess": "Enregistrement réussi"
},
"privacy-policy": {
"saveSuccess": "Enregistrement réussi",
"title": "Politique de confidentialité"
},
"site": {
"customHtml": "HTML personnalisé",
"customHtmlDescription": "Code HTML personnalisé à injecter dans le bas de la balise body du site.",
"keywords": "Mots-clés",
"keywordsDescription": "Utilisé à des fins de référencement",
"logo": "LOGO",
"logoDescription": "Utilisé pour afficher l'emplacement où le LOGO doit être montré",
"logoPlaceholder": "Veuillez entrer l'URL du LOGO, ne pas terminer par '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"confirmDelete": "हटाने की पुष्टि करें",
"create": "विज्ञापन बनाएं",
"createAds": "विज्ञापन बनाएं",
"createSuccess": "सफलता से बनाया गया",
"delete": "हटाएं",
"deleteSuccess": "सफलता से हटाया गया",
"deleteWarning": "क्या आप वास्तव में इस विज्ञापन को हटाना चाहते हैं?",
"disabled": "अक्षम",
"edit": "संपादित करें",
"editAds": "विज्ञापन संपादित करें",
"enabled": "सक्षम",
"form": {
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"content": "सामग्री",
"description": "विवरण",
"endTime": "समाप्ति समय",
"enterContent": "कृपया विज्ञापन सामग्री दर्ज करें",
"enterDescription": "कृपया विज्ञापन विवरण दर्ज करें",
"enterEndTime": "कृपया समाप्ति समय चुनें",
"enterStartTime": "कृपया प्रारंभ समय चुनें",
"enterTargetUrl": "कृपया लक्षित URL दर्ज करें",
"enterTitle": "कृपया विज्ञापन शीर्षक दर्ज करें",
"startTime": "प्रारंभ समय",
"targetUrl": "लक्षित URL",
"title": "शीर्षक",
"type": "विज्ञापन प्रकार",
"typeImage": "छवि",
"typeVideo": "वीडियो"
},
"status": "स्थिति",
"targetUrl": "लक्षित URL",
"title": "शीर्षक",
"type": "प्रकार",
"updateSuccess": "सफलता से अपडेट किया गया",
"validityPeriod": "वैधता अवधि"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "वर्चुअल मशीन को ब्लॉक करें",
"blockVirtualMachineDescription": "जब सक्षम किया जाता है, तो उपकरणों को वर्चुअल मशीनों या एमुलेटर्स पर चलने से रोका जाएगा",
"communicationKey": "संचार कुंजी",
"communicationKeyDescription": "संचार कुंजी का उपयोग उपकरणों और सर्वरों के बीच सुरक्षित संचार के लिए किया जाता है",
"enable": "सक्रिय करें",
"enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है"
"enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है",
"enableSecurity": "संचार एन्क्रिप्शन सक्षम करें",
"enableSecurityDescription": "जब सक्षम किया जाता है, तो उपकरणों और सर्वरों के बीच का संचार एन्क्रिप्ट किया जाएगा",
"saveFailed": "सहेजना विफल",
"saveSuccess": "सहेजना सफल",
"showAds": "विज्ञापन दिखाएँ",
"showAdsDescription": "जब सक्षम किया जाता है, तो उपकरणों पर विज्ञापन प्रदर्शित किए जाएंगे"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "चेक",
"de-DE": "जर्मन",
"en-US": "अंग्रेज़ी",
"es-ES": "स्पेनिश",
"es-MX": "स्पेनिश (मेक्सिको)",
"fa-IR": "फ़ारसी",
"fi-FI": "फिनिश",
"fr-FR": "फ्रेंच",
"hi-IN": "हिंदी",
"hu-HU": "हंगेरियन",
"ja-JP": "जापानी",
"ko-KR": "कोरियाई",
"no-NO": "नॉर्वेजियन",
"pl-PL": "पोलिश",
"pt-BR": "पुर्तगाली (ब्राज़ील)",
"ro-RO": "रोमानियाई",
"ru-RU": "रूसी",
"th-TH": "थाई",
"tr-TR": "तुर्की",
"uk-UA": "यूक्रेनी",
"vi-VN": "वियतनामी",
"zh-CN": "चीनी (सरल)",
"zh-HK": "चीनी (पारंपरिक)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "एडीएस कॉन्फ़िग",
"Announcement Management": "घोषणा प्रबंधन",
"Apple": "एप्पल आईडी",
"Auth Control": "प्रमाणिकरण नियंत्रण",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "केवल प्रदर्शन के लिए उपयोग किया जाता है, परिवर्तन के बाद सिस्टम में सभी मुद्रा इकाइयाँ बदल जाएँगी",
"saveSuccess": "सफलतापूर्वक सहेजा गया"
},
"privacy-policy": {
"saveSuccess": "सफलता से सहेजा गया",
"title": "गोपनीयता नीति"
},
"site": {
"customHtml": "कस्टम HTML",
"customHtmlDescription": "साइट के bodyैग के नीचे इंजेक्ट करने के लिए कस्टम HTML कोड।",
"keywords": "कीवर्ड",
"keywordsDescription": "SEO उद्देश्यों के लिए उपयोग किया जाता है",
"logo": "लोगो",
"logoDescription": "लोगो प्रदर्शित करने के लिए आवश्यक स्थान",
"logoPlaceholder": "कृपया लोगो का URL पता दर्ज करें, '/' के साथ समाप्त न करें",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Mégse",
"confirm": "Megerősítés",
"confirmDelete": "Törlés megerősítése",
"create": "Hirdetés létrehozása",
"createAds": "Hirdetés létrehozása",
"createSuccess": "Sikeresen létrehozva",
"delete": "Törlés",
"deleteSuccess": "Sikeresen törölve",
"deleteWarning": "Biztosan törölni szeretné ezt a hirdetést?",
"disabled": "Letiltva",
"edit": "Szerkesztés",
"editAds": "Hirdetés szerkesztése",
"enabled": "Engedélyezve",
"form": {
"cancel": "Mégse",
"confirm": "Megerősítés",
"content": "Tartalom",
"description": "Leírás",
"endTime": "Befejezési idő",
"enterContent": "Kérjük, adja meg a hirdetés tartalmát",
"enterDescription": "Kérjük, adja meg a hirdetés leírását",
"enterEndTime": "Kérjük, válassza ki a befejezési időt",
"enterStartTime": "Kérjük, válassza ki a kezdési időt",
"enterTargetUrl": "Kérjük, adja meg a cél URL-t",
"enterTitle": "Kérjük, adja meg a hirdetés címét",
"startTime": "Kezdési idő",
"targetUrl": "Cél URL",
"title": "Cím",
"type": "Hirdetés típusa",
"typeImage": "Kép",
"typeVideo": "Videó"
},
"status": "Állapot",
"targetUrl": "Cél URL",
"title": "Cím",
"type": "Típus",
"updateSuccess": "Sikeresen frissítve",
"validityPeriod": "Érvényességi időszak"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Virtuális gép blokkolása",
"blockVirtualMachineDescription": "Ha engedélyezve van, az eszközök nem fognak tudni virtuális gépeken vagy emulátorokon futni",
"communicationKey": "Kommunikációs kulcs",
"communicationKeyDescription": "A kommunikációs kulcs a biztonságos kommunikációhoz szükséges az eszközök és a szerverek között",
"enable": "Engedélyezés",
"enableDescription": "Engedélyezés után több eszközazonosító, például IMEI/IDFA/IDFV/AndroidID/Mac-cím támogatott a bejelentkezéshez és a regisztrációhoz."
"enableDescription": "Engedélyezés után több eszközazonosító, például IMEI/IDFA/IDFV/AndroidID/Mac-cím támogatott a bejelentkezéshez és a regisztrációhoz.",
"enableSecurity": "Kommunikációs titkosítás engedélyezése",
"enableSecurityDescription": "Ha engedélyezve van, az eszközök és a szerverek közötti kommunikáció titkosítva lesz",
"saveFailed": "Mentés sikertelen",
"saveSuccess": "Mentés sikeres",
"showAds": "Hirdetések megjelenítése",
"showAdsDescription": "Ha engedélyezve van, hirdetések fognak megjelenni az eszközökön"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "cseh",
"de-DE": "német",
"en-US": "angol",
"es-ES": "spanyol",
"es-MX": "spanyol (Mexikó)",
"fa-IR": "Perzsa",
"fi-FI": "finn",
"fr-FR": "francia",
"hi-IN": "hindi",
"hu-HU": "magyar",
"ja-JP": "japán",
"ko-KR": "Koreai",
"no-NO": "norvég",
"pl-PL": "lengyel",
"pt-BR": "portugál (Brazília)",
"ro-RO": "román nyelv",
"ru-RU": "Orosz",
"th-TH": "thai nyelv",
"tr-TR": "török",
"uk-UA": "ukrán",
"vi-VN": "vietnámi",
"zh-CN": "kínai (egyszerűsített)",
"zh-HK": "Kínai (hagyományos)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS konfiguráció",
"Announcement Management": "Hirdetménykezelés",
"Apple": "Apple ID",
"Auth Control": "Hitelesítési vezérlés",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Csak megjelenítésre használatos, a módosítás után a rendszer összes pénznem egysége megváltozik",
"saveSuccess": "Sikeres mentés"
},
"privacy-policy": {
"saveSuccess": "Mentés sikeres",
"title": "Adatvédelmi irányelvek"
},
"site": {
"customHtml": "Egyedi HTML",
"customHtmlDescription": "Egyedi HTML kód, amelyet a webhely bodyímkéjének aljára kell beilleszteni.",
"keywords": "Kulcsszavak",
"keywordsDescription": "SEO célokra használva",
"logo": "LOGÓ",
"logoDescription": "A LOGÓ megjelenítésére szolgáló hely",
"logoPlaceholder": "Kérjük, adja meg a LOGÓ URL-címét, ne végződjön '/' jellel",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "キャンセル",
"confirm": "確認",
"confirmDelete": "削除を確認",
"create": "広告を作成",
"createAds": "広告を作成",
"createSuccess": "作成に成功しました",
"delete": "削除",
"deleteSuccess": "削除に成功しました",
"deleteWarning": "この広告を削除してもよろしいですか?",
"disabled": "無効",
"edit": "編集",
"editAds": "広告を編集",
"enabled": "有効",
"form": {
"cancel": "キャンセル",
"confirm": "確認",
"content": "コンテンツ",
"description": "説明",
"endTime": "終了時間",
"enterContent": "広告の内容を入力してください",
"enterDescription": "広告の説明を入力してください",
"enterEndTime": "終了時間を選択してください",
"enterStartTime": "開始時間を選択してください",
"enterTargetUrl": "ターゲットURLを入力してください",
"enterTitle": "広告のタイトルを入力してください",
"startTime": "開始時間",
"targetUrl": "ターゲットURL",
"title": "タイトル",
"type": "広告の種類",
"typeImage": "画像",
"typeVideo": "動画"
},
"status": "ステータス",
"targetUrl": "ターゲットURL",
"title": "タイトル",
"type": "種類",
"updateSuccess": "更新に成功しました",
"validityPeriod": "有効期限"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "仮想マシンをブロック",
"blockVirtualMachineDescription": "有効にすると、デバイスは仮想マシンやエミュレーター上での実行が禁止されます",
"communicationKey": "通信キー",
"communicationKeyDescription": "通信キーは、デバイスとサーバー間の安全な通信に使用されます",
"enable": "有効化",
"enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。"
"enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。",
"enableSecurity": "通信暗号化を有効にする",
"enableSecurityDescription": "有効にすると、デバイスとサーバー間の通信が暗号化されます",
"saveFailed": "保存に失敗しました",
"saveSuccess": "保存に成功しました",
"showAds": "広告を表示",
"showAdsDescription": "有効にすると、デバイスに広告が表示されます"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "チェコ語",
"de-DE": "ドイツ語",
"en-US": "英語",
"es-ES": "スペイン語",
"es-MX": "スペイン語(メキシコ)",
"fa-IR": "ペルシャ語",
"fi-FI": "フィンランド語",
"fr-FR": "フランス語",
"hi-IN": "ヒンディー語",
"hu-HU": "ハンガリー語",
"ja-JP": "日本語",
"ko-KR": "韓国語",
"no-NO": "ノルウェー語",
"pl-PL": "ポーランド語",
"pt-BR": "ポルトガル語(ブラジル)",
"ro-RO": "ルーマニア語",
"ru-RU": "ロシア語",
"th-TH": "タイ語",
"tr-TR": "トルコ語",
"uk-UA": "ウクライナ語",
"vi-VN": "ベトナム語",
"zh-CN": "日本語",
"zh-HK": "中国語(繁体字)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS設定",
"Announcement Management": "お知らせ管理",
"Apple": "Apple ID",
"Auth Control": "認証管理",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "表示のみに使用され、変更するとシステム内のすべての通貨単位が変更されます",
"saveSuccess": "保存に成功しました"
},
"privacy-policy": {
"saveSuccess": "保存に成功しました",
"title": "プライバシーポリシー"
},
"site": {
"customHtml": "カスタムHTML",
"customHtmlDescription": "サイトの body タグの下部に挿入されるカスタム HTML コード。",
"keywords": "キーワード",
"keywordsDescription": "SEO目的で使用されます",
"logo": "LOGO",
"logoDescription": "LOGOを表示する必要がある場所に使用されます",
"logoPlaceholder": "LOGOのURLアドレスを入力してください。末尾に'/'を付けないでください",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "취소",
"confirm": "확인",
"confirmDelete": "삭제 확인",
"create": "광고 만들기",
"createAds": "광고 생성",
"createSuccess": "성공적으로 생성되었습니다",
"delete": "삭제",
"deleteSuccess": "성공적으로 삭제되었습니다",
"deleteWarning": "이 광고를 삭제하시겠습니까?",
"disabled": "비활성화됨",
"edit": "편집",
"editAds": "광고 편집",
"enabled": "활성화됨",
"form": {
"cancel": "취소",
"confirm": "확인",
"content": "내용",
"description": "설명",
"endTime": "종료 시간",
"enterContent": "광고 내용을 입력하세요",
"enterDescription": "광고 설명을 입력하세요",
"enterEndTime": "종료 시간을 선택하세요",
"enterStartTime": "시작 시간을 선택하세요",
"enterTargetUrl": "대상 URL을 입력하세요",
"enterTitle": "광고 제목을 입력하세요",
"startTime": "시작 시간",
"targetUrl": "대상 URL",
"title": "제목",
"type": "광고 유형",
"typeImage": "이미지",
"typeVideo": "비디오"
},
"status": "상태",
"targetUrl": "대상 URL",
"title": "제목",
"type": "유형",
"updateSuccess": "성공적으로 업데이트되었습니다",
"validityPeriod": "유효 기간"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "가상 머신 차단",
"blockVirtualMachineDescription": "활성화되면, 장치가 가상 머신이나 에뮬레이터에서 실행되는 것을 방지합니다.",
"communicationKey": "통신 키",
"communicationKeyDescription": "통신 키는 장치와 서버 간의 안전한 통신을 위해 사용됩니다.",
"enable": "활성화",
"enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다."
"enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다.",
"enableSecurity": "통신 암호화 활성화",
"enableSecurityDescription": "활성화되면, 장치와 서버 간의 통신이 암호화됩니다.",
"saveFailed": "저장 실패",
"saveSuccess": "저장 성공",
"showAds": "광고 표시",
"showAdsDescription": "활성화되면, 장치에 광고가 표시됩니다."
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "체코어",
"de-DE": "독일어",
"en-US": "영어",
"es-ES": "스페인어",
"es-MX": "스페인어(멕시코)",
"fa-IR": "페르시아어",
"fi-FI": "핀란드어",
"fr-FR": "프랑스어",
"hi-IN": "힌디어",
"hu-HU": "헝가리어",
"ja-JP": "일본어",
"ko-KR": "한국어",
"no-NO": "노르웨이어",
"pl-PL": "폴란드어",
"pt-BR": "포르투갈어(브라질)",
"ro-RO": "루마니아어",
"ru-RU": "러시아어",
"th-TH": "태국어",
"tr-TR": "터키어",
"uk-UA": "우크라이나어",
"vi-VN": "베트남어",
"zh-CN": "중국어(간체)",
"zh-HK": "중국어(번체)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS 구성",
"Announcement Management": "공지 관리",
"Apple": "Apple ID",
"Auth Control": "인증 제어",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "표시용으로만 사용되며, 변경 시 시스템 내 모든 통화 단위가 변경됩니다",
"saveSuccess": "저장 성공"
},
"privacy-policy": {
"saveSuccess": "저장 성공",
"title": "개인정보 처리방침"
},
"site": {
"customHtml": "사용자 정의 HTML",
"customHtmlDescription": "사이트의 body그 하단에 삽입될 사용자 정의 HTML 코드입니다.",
"keywords": "키워드",
"keywordsDescription": "SEO 목적으로 사용됨",
"logo": "LOGO",
"logoDescription": "LOGO를 표시해야 하는 위치에 사용됩니다",
"logoPlaceholder": "LOGO의 URL 주소를 입력하세요. '/'로 끝나지 않도록 하세요",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Avbryt",
"confirm": "Bekreft",
"confirmDelete": "Bekreft sletting",
"create": "Opprett annonse",
"createAds": "Opprett annonse",
"createSuccess": "Opprettet med suksess",
"delete": "Slett",
"deleteSuccess": "Slettet med suksess",
"deleteWarning": "Er du sikker på at du vil slette denne annonsen?",
"disabled": "Deaktivert",
"edit": "Rediger",
"editAds": "Rediger annonse",
"enabled": "Aktivert",
"form": {
"cancel": "Avbryt",
"confirm": "Bekreft",
"content": "Innhold",
"description": "Beskrivelse",
"endTime": "Sluttid",
"enterContent": "Vennligst skriv inn annonseinnhold",
"enterDescription": "Vennligst skriv inn annonsebeskrivelse",
"enterEndTime": "Vennligst velg sluttid",
"enterStartTime": "Vennligst velg starttid",
"enterTargetUrl": "Vennligst skriv inn mål-URL",
"enterTitle": "Vennligst skriv inn annonsetittel",
"startTime": "Starttid",
"targetUrl": "Mål-URL",
"title": "Tittel",
"type": "Annonsetype",
"typeImage": "Bilde",
"typeVideo": "Video"
},
"status": "Status",
"targetUrl": "Mål-URL",
"title": "Tittel",
"type": "Type",
"updateSuccess": "Oppdatert med suksess",
"validityPeriod": "Gyldighetsperiode"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Blokker virtuell maskin",
"blockVirtualMachineDescription": "Når aktivert, vil enheter bli forhindret fra å kjøre på virtuelle maskiner eller emulatorer",
"communicationKey": "Kommunikasjonsnøkkel",
"communicationKeyDescription": "Kommunikasjonsnøkkelen brukes for sikker kommunikasjon mellom enheter og servere",
"enable": "Aktiver",
"enableDescription": "Etter aktivering støttes flere enhetsidentifikatorer som IMEI/IDFA/IDFV/AndroidID/Mac-adresse for pålogging og registrering"
"enableDescription": "Etter aktivering støttes flere enhetsidentifikatorer som IMEI/IDFA/IDFV/AndroidID/Mac-adresse for pålogging og registrering",
"enableSecurity": "Aktiver kommunikasjonskryptering",
"enableSecurityDescription": "Når aktivert, vil kommunikasjonen mellom enheter og servere bli kryptert",
"saveFailed": "Lagring mislyktes",
"saveSuccess": "Lagring vellykket",
"showAds": "Vis annonser",
"showAdsDescription": "Når aktivert, vil annonser bli vist på enhetene"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tsjekkisk",
"de-DE": "Tysk",
"en-US": "engelsk",
"es-ES": "Spansk",
"es-MX": "Spansk (Mexico)",
"fa-IR": "Persisk",
"fi-FI": "Finsk",
"fr-FR": "Fransk",
"hi-IN": "Hindi",
"hu-HU": "Ungarsk",
"ja-JP": "Japansk",
"ko-KR": "Koreansk",
"no-NO": "Norsk",
"pl-PL": "Polsk",
"pt-BR": "Portugisisk (Brasil)",
"ro-RO": "Rumensk",
"ru-RU": "Russisk",
"th-TH": "Thai",
"tr-TR": "Tyrkisk",
"uk-UA": "Ukrainsk",
"vi-VN": "Vietnamesisk",
"zh-CN": "Kinesisk (forenklet)",
"zh-HK": "Kinesisk (tradisjonell)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "ADS-konfigurasjon",
"Announcement Management": "Kunngjøringsadministrasjon",
"Apple": "Apple-ID",
"Auth Control": "Autentiseringskontroll",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Kun for visningsformål, endring vil påvirke alle valutaenheter i systemet",
"saveSuccess": "Lagring vellykket"
},
"privacy-policy": {
"saveSuccess": "Lagring vellykket",
"title": "Personvernerklæring"
},
"site": {
"customHtml": "Egendefinert HTML",
"customHtmlDescription": "Egendefinert HTML-kode som skal settes inn i bunnen av nettstedets body-tag.",
"keywords": "Nøkkelord",
"keywordsDescription": "Brukes til SEO-formål",
"logo": "LOGO",
"logoDescription": "Brukes til å vise hvor LOGO skal vises",
"logoPlaceholder": "Vennligst skriv inn URL-adressen til LOGO, ikke avslutt med '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Anuluj",
"confirm": "Potwierdź",
"confirmDelete": "Potwierdź usunięcie",
"create": "Utwórz reklamę",
"createAds": "Utwórz ogłoszenie",
"createSuccess": "Pomyślnie utworzono",
"delete": "Usuń",
"deleteSuccess": "Pomyślnie usunięto",
"deleteWarning": "Czy na pewno chcesz usunąć tę reklamę?",
"disabled": "Wyłączone",
"edit": "Edytuj",
"editAds": "Edytuj ogłoszenie",
"enabled": "Włączone",
"form": {
"cancel": "Anuluj",
"confirm": "Potwierdź",
"content": "Treść",
"description": "Opis",
"endTime": "Czas zakończenia",
"enterContent": "Proszę wprowadzić treść reklamy",
"enterDescription": "Proszę wprowadzić opis reklamy",
"enterEndTime": "Proszę wybrać czas zakończenia",
"enterStartTime": "Proszę wybrać czas rozpoczęcia",
"enterTargetUrl": "Proszę wprowadzić docelowy URL",
"enterTitle": "Proszę wprowadzić tytuł reklamy",
"startTime": "Czas rozpoczęcia",
"targetUrl": "Docelowy URL",
"title": "Tytuł",
"type": "Typ reklamy",
"typeImage": "Obraz",
"typeVideo": "Wideo"
},
"status": "Status",
"targetUrl": "Docelowy URL",
"title": "Tytuł",
"type": "Typ",
"updateSuccess": "Pomyślnie zaktualizowano",
"validityPeriod": "Okres ważności"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Zablokuj maszynę wirtualną",
"blockVirtualMachineDescription": "Po włączeniu urządzenia nie będą mogły działać na maszynach wirtualnych lub emulatorach",
"communicationKey": "Klucz komunikacji",
"communicationKeyDescription": "Klucz komunikacji jest używany do bezpiecznej komunikacji między urządzeniami a serwerami",
"enable": "Włącz",
"enableDescription": "Po włączeniu obsługiwane są różne identyfikatory urządzeń, takie jak IMEI/IDFA/IDFV/AndroidID/adres MAC do logowania i rejestracji"
"enableDescription": "Po włączeniu obsługiwane są różne identyfikatory urządzeń, takie jak IMEI/IDFA/IDFV/AndroidID/adres MAC do logowania i rejestracji",
"enableSecurity": "Włącz szyfrowanie komunikacji",
"enableSecurityDescription": "Po włączeniu komunikacja między urządzeniami a serwerami będzie szyfrowana",
"saveFailed": "Zapis nie powiódł się",
"saveSuccess": "Zapisano pomyślnie",
"showAds": "Wyświetl reklamy",
"showAdsDescription": "Po włączeniu na urządzeniach będą wyświetlane reklamy"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "język czeski",
"de-DE": "niemiecki",
"en-US": "angielski",
"es-ES": "hiszpański",
"es-MX": "hiszpański (Meksyk)",
"fa-IR": "perski",
"fi-FI": "fiński",
"fr-FR": "francuski",
"hi-IN": "hindi",
"hu-HU": "język węgierski",
"ja-JP": "język japoński",
"ko-KR": "Koreański",
"no-NO": "norweski",
"pl-PL": "Polski",
"pt-BR": "portugalski (Brazylia)",
"ro-RO": "rumuński",
"ru-RU": "Rosyjski",
"th-TH": "tajski",
"tr-TR": "turecki",
"uk-UA": "ukraiński",
"vi-VN": "język wietnamski",
"zh-CN": "chiński (uproszczony)",
"zh-HK": "chiński (tradycyjny)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Konfiguracja ADS",
"Announcement Management": "Zarządzanie ogłoszeniami",
"Apple": "Identyfikator Apple",
"Auth Control": "Kontrola autoryzacji",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Używane wyłącznie do celów wyświetlania, po zmianie wszystkie jednostki walutowe w systemie zostaną zmienione",
"saveSuccess": "Zapisano pomyślnie"
},
"privacy-policy": {
"saveSuccess": "Zapisano pomyślnie",
"title": "Polityka prywatności"
},
"site": {
"customHtml": "Niestandardowy HTML",
"customHtmlDescription": "Niestandardowy kod HTML, który ma być wstrzyknięty na końcu tagu bodyitryny.",
"keywords": "Słowa kluczowe",
"keywordsDescription": "Używane do celów SEO",
"logo": "LOGO",
"logoDescription": "Miejsce do wyświetlania LOGO",
"logoPlaceholder": "Wprowadź adres URL LOGO, nie kończ na '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Exclusão",
"create": "Criar Anúncio",
"createAds": "Criar Anúncio",
"createSuccess": "Criado com sucesso",
"delete": "Excluir",
"deleteSuccess": "Excluído com sucesso",
"deleteWarning": "Você tem certeza de que deseja excluir este anúncio?",
"disabled": "Desativado",
"edit": "Editar",
"editAds": "Editar Anúncio",
"enabled": "Ativado",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"content": "Conteúdo",
"description": "Descrição",
"endTime": "Hora de Término",
"enterContent": "Por favor, insira o conteúdo do anúncio",
"enterDescription": "Por favor, insira a descrição do anúncio",
"enterEndTime": "Por favor, selecione a hora de término",
"enterStartTime": "Por favor, selecione a hora de início",
"enterTargetUrl": "Por favor, insira a URL de destino",
"enterTitle": "Por favor, insira o título do anúncio",
"startTime": "Hora de Início",
"targetUrl": "URL de Destino",
"title": "Título",
"type": "Tipo de Anúncio",
"typeImage": "Imagem",
"typeVideo": "Vídeo"
},
"status": "Status",
"targetUrl": "URL de Destino",
"title": "Título",
"type": "Tipo",
"updateSuccess": "Atualizado com sucesso",
"validityPeriod": "Período de Validade"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Bloquear Máquina Virtual",
"blockVirtualMachineDescription": "Quando ativado, os dispositivos serão impedidos de rodar em máquinas virtuais ou emuladores",
"communicationKey": "Chave de Comunicação",
"communicationKeyDescription": "A chave de comunicação é usada para comunicação segura entre dispositivos e servidores",
"enable": "Ativar",
"enableDescription": "Após a ativação, múltiplos identificadores de dispositivo, como IMEI/IDFA/IDFV/AndroidID/endereço Mac, são suportados para login e registro"
"enableDescription": "Após a ativação, múltiplos identificadores de dispositivo, como IMEI/IDFA/IDFV/AndroidID/endereço Mac, são suportados para login e registro",
"enableSecurity": "Ativar Criptografia de Comunicação",
"enableSecurityDescription": "Quando ativado, a comunicação entre dispositivos e servidores será criptografada",
"saveFailed": "Falha ao salvar",
"saveSuccess": "Salvo com sucesso",
"showAds": "Mostrar Anúncios",
"showAdsDescription": "Quando ativado, anúncios serão exibidos nos dispositivos"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Tcheco",
"de-DE": "Alemão",
"en-US": "inglês",
"es-ES": "Espanhol",
"es-MX": "Espanhol (México)",
"fa-IR": "Persa",
"fi-FI": "Finlandês",
"fr-FR": "Francês",
"hi-IN": "hindi",
"hu-HU": "Húngaro",
"ja-JP": "Japonês",
"ko-KR": "Coreano",
"no-NO": "Norueguês",
"pl-PL": "Polonês",
"pt-BR": "Português (Brasil)",
"ro-RO": "Romeno",
"ru-RU": "Russo",
"th-TH": "Tailandês",
"tr-TR": "turco",
"uk-UA": "Ucraniano",
"vi-VN": "Vietnamita",
"zh-CN": "Chinês (Simplificado)",
"zh-HK": "Chinês (Tradicional)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Configuração ADS",
"Announcement Management": "Gerenciamento de Anúncios",
"Apple": "ID Apple",
"Auth Control": "Controle de Autenticação",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Usado apenas para exibição, após a alteração todas as unidades monetárias no sistema serão alteradas",
"saveSuccess": "Salvo com sucesso"
},
"privacy-policy": {
"saveSuccess": "Salvo com Sucesso",
"title": "Política de Privacidade"
},
"site": {
"customHtml": "HTML Personalizado",
"customHtmlDescription": "Código HTML personalizado a ser inserido no final da tag bodyo site.",
"keywords": "Palavras-chave",
"keywordsDescription": "Usado para fins de SEO",
"logo": "LOGO",
"logoDescription": "Usado para exibir a posição onde o LOGO precisa ser mostrado",
"logoPlaceholder": "Por favor, insira o URL do LOGO, não termine com '/'",
+1 -1
View File
@@ -10,7 +10,6 @@ export default getRequestConfig(async () => {
const locale = cookieLocale || defaultLocale || NEXT_PUBLIC_DEFAULT_LANGUAGE;
const messages = {
'language': (await import(`./${locale}/language.json`)).default,
'menu': (await import(`./${locale}/menu.json`)).default,
'auth': (await import(`./${locale}/auth.json`)).default,
'common': (await import(`./${locale}/common.json`)).default,
@@ -24,6 +23,7 @@ export default getRequestConfig(async () => {
'facebook': (await import(`./${locale}/facebook.json`)).default,
'github': (await import(`./${locale}/github.json`)).default,
'device': (await import(`./${locale}/device.json`)).default,
'ads': (await import(`./${locale}/ads.json`)).default,
'payment': (await import(`./${locale}/payment.json`)).default,
'server': (await import(`./${locale}/server.json`)).default,
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Anulează",
"confirm": "Confirmă",
"confirmDelete": "Confirmă ștergerea",
"create": "Creează anunț",
"createAds": "Creează publicitate",
"createSuccess": "Creat cu succes",
"delete": "Șterge",
"deleteSuccess": "Șters cu succes",
"deleteWarning": "Ești sigur că vrei să ștergi acest anunț?",
"disabled": "Dezactivat",
"edit": "Editează",
"editAds": "Editează publicitate",
"enabled": "Activat",
"form": {
"cancel": "Anulează",
"confirm": "Confirmă",
"content": "Conținut",
"description": "Descriere",
"endTime": "Ora de încheiere",
"enterContent": "Te rugăm să introduci conținutul anunțului",
"enterDescription": "Te rugăm să introduci descrierea anunțului",
"enterEndTime": "Te rugăm să selectezi ora de încheiere",
"enterStartTime": "Te rugăm să selectezi ora de început",
"enterTargetUrl": "Te rugăm să introduci URL-ul țintă",
"enterTitle": "Te rugăm să introduci titlul anunțului",
"startTime": "Ora de început",
"targetUrl": "URL țintă",
"title": "Titlu",
"type": "Tip anunț",
"typeImage": "Imagine",
"typeVideo": "Video"
},
"status": "Stare",
"targetUrl": "URL țintă",
"title": "Titlu",
"type": "Tip",
"updateSuccess": "Actualizat cu succes",
"validityPeriod": "Perioada de valabilitate"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Blochează Mașina Virtuală",
"blockVirtualMachineDescription": "Când este activat, dispozitivele vor fi împiedicate să ruleze pe mașini virtuale sau emulatoare",
"communicationKey": "Cheia de Comunicare",
"communicationKeyDescription": "Cheia de comunicare este utilizată pentru comunicarea securizată între dispozitive și servere",
"enable": "Activare",
"enableDescription": "După activare, sunt acceptate mai multe identificatoare de dispozitive, cum ar fi IMEI/IDFA/IDFV/AndroidID/adresa Mac pentru autentificare și înregistrare."
"enableDescription": "După activare, sunt acceptate mai multe identificatoare de dispozitive, cum ar fi IMEI/IDFA/IDFV/AndroidID/adresa Mac pentru autentificare și înregistrare.",
"enableSecurity": "Activează Criptarea Comunicației",
"enableSecurityDescription": "Când este activat, comunicația între dispozitive și servere va fi criptată",
"saveFailed": "Salvarea a eșuat",
"saveSuccess": "Salvarea a fost reușită",
"showAds": "Afișează Reclame",
"showAdsDescription": "Când este activat, reclamele vor fi afișate pe dispozitive"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "cehă",
"de-DE": "Germană",
"en-US": "engleză",
"es-ES": "Spaniolă",
"es-MX": "Spaniolă (Mexic)",
"fa-IR": "Persană",
"fi-FI": "Finlandeză",
"fr-FR": "franceză",
"hi-IN": "hindi",
"hu-HU": "Maghiară",
"ja-JP": "Japoneză",
"ko-KR": "Coreeană",
"no-NO": "norvegiană",
"pl-PL": "Poloneză",
"pt-BR": "Portugheză (Brazilia)",
"ro-RO": "Română",
"ru-RU": "Rusă",
"th-TH": "Thailandeză",
"tr-TR": "turcă",
"uk-UA": "Ucraineană",
"vi-VN": "Vietnameză",
"zh-CN": "Chineză (Simplificată)",
"zh-HK": "Chineză (tradițională)"
}
+1
View File
@@ -1,4 +1,5 @@
{
"ADS Config": "Configurație ADS",
"Announcement Management": "Managementul Anunțurilor",
"Apple": "ID Apple",
"Auth Control": "Control Autentificare",
+8
View File
@@ -8,7 +8,15 @@
"currencyUnitDescription": "Utilizat doar pentru afișare, după modificare toate unitățile monetare din sistem vor fi schimbate",
"saveSuccess": "Salvare reușită"
},
"privacy-policy": {
"saveSuccess": "Salvare reușită",
"title": "Politica de confidențialitate"
},
"site": {
"customHtml": "HTML personalizat",
"customHtmlDescription": "Cod HTML personalizat care va fi injectat în partea de jos a etichetei body a site-ului.",
"keywords": "Cuvinte cheie",
"keywordsDescription": "Utilizate în scopuri SEO",
"logo": "LOGO",
"logoDescription": "Utilizat pentru a afișa locația unde trebuie să fie prezentat LOGO-ul",
"logoPlaceholder": "Vă rugăm să introduceți adresa URL a LOGO-ului, fără să se termine cu '/'",
+40
View File
@@ -0,0 +1,40 @@
{
"cancel": "Отмена",
"confirm": "Подтвердить",
"confirmDelete": "Подтвердить удаление",
"create": "Создать объявление",
"createAds": "Создать рекламу",
"createSuccess": "Успешно создано",
"delete": "Удалить",
"deleteSuccess": "Успешно удалено",
"deleteWarning": "Вы уверены, что хотите удалить это объявление?",
"disabled": "Отключено",
"edit": "Редактировать",
"editAds": "Редактировать рекламу",
"enabled": "Включено",
"form": {
"cancel": "Отмена",
"confirm": "Подтвердить",
"content": "Содержимое",
"description": "Описание",
"endTime": "Время окончания",
"enterContent": "Пожалуйста, введите содержимое объявления",
"enterDescription": "Пожалуйста, введите описание объявления",
"enterEndTime": "Пожалуйста, выберите время окончания",
"enterStartTime": "Пожалуйста, выберите время начала",
"enterTargetUrl": "Пожалуйста, введите целевой URL",
"enterTitle": "Пожалуйста, введите заголовок объявления",
"startTime": "Время начала",
"targetUrl": "Целевой URL",
"title": "Заголовок",
"type": "Тип объявления",
"typeImage": "Изображение",
"typeVideo": "Видео"
},
"status": "Статус",
"targetUrl": "Целевой URL",
"title": "Заголовок",
"type": "Тип",
"updateSuccess": "Успешно обновлено",
"validityPeriod": "Срок действия"
}
+11 -1
View File
@@ -1,4 +1,14 @@
{
"blockVirtualMachine": "Блокировать виртуальную машину",
"blockVirtualMachineDescription": "При включении устройства не смогут работать на виртуальных машинах или эмуляторах",
"communicationKey": "Ключ связи",
"communicationKeyDescription": "Ключ связи используется для безопасной связи между устройствами и серверами",
"enable": "Включить",
"enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации"
"enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации",
"enableSecurity": "Включить шифрование связи",
"enableSecurityDescription": "При включении связь между устройствами и серверами будет зашифрована",
"saveFailed": "Не удалось сохранить",
"saveSuccess": "Сохранение успешно",
"showAds": "Показать рекламу",
"showAdsDescription": "При включении реклама будет отображаться на устройствах"
}
-25
View File
@@ -1,25 +0,0 @@
{
"cs-CZ": "Чешский",
"de-DE": "Немецкий",
"en-US": "английский",
"es-ES": "испанский",
"es-MX": "испанский (Мексика)",
"fa-IR": "Персидский",
"fi-FI": "финский",
"fr-FR": "Французский",
"hi-IN": "хинди",
"hu-HU": "Венгерский",
"ja-JP": "японский",
"ko-KR": "Корейский",
"no-NO": "Норвежский",
"pl-PL": "польский",
"pt-BR": "португальский (Бразилия)",
"ro-RO": "румынский",
"ru-RU": "Русский",
"th-TH": "тайский",
"tr-TR": "Турецкий",
"uk-UA": "Украинский",
"vi-VN": "вьетнамский",
"zh-CN": "Китайский (упрощенный)",
"zh-HK": "китайский (традиционный)"
}

Some files were not shown because too many files have changed in this diff Show More