Skip to content

Commit 4db28f4

Browse files
committed
docs: development page ru
1 parent 85752dc commit 4db28f4

File tree

1 file changed

+184
-1
lines changed

1 file changed

+184
-1
lines changed

Diff for: docs/ru/community/development.md

+184-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,184 @@
1-
# Development
1+
# Разработка
2+
3+
## Добавление сервисов
4+
5+
Давайте разберем создание на примере нового сервиса `Bitcoin`, который будет получать информацию из внешнего API.
6+
7+
#### 1. Создание интерфейса
8+
9+
Первым делом обозначим интерфейс взаимодействия сервиса. Необходимо для определения дополнительных свойств:
10+
11+
::: code-group
12+
```typescript [types/services.d.ts]
13+
export interface BitcoinService extends BaseService {
14+
options?: {
15+
code: string
16+
interval?: number
17+
}
18+
}
19+
```
20+
:::
21+
22+
#### 2. Создание компонента
23+
24+
::: code-group
25+
```vue [components/service/bitcoin.vue]
26+
<template>
27+
<ServiceBase v-bind="props">
28+
<template #title>
29+
{{ $('service.bitcoin.title', { code: options.code }) }}
30+
</template>
31+
<template #description>
32+
{{ $('service.bitcoin.description', { rate: data?.rate || '0' }) }}
33+
</template>
34+
</ServiceBase>
35+
</template>
36+
37+
<script setup lang="ts">
38+
import type { BitcoinService } from '~/types'
39+
40+
const props = defineProps<BitcoinService>()
41+
const { data, pauseUpdate } = useServiceData<BitcoinService, { rate: string }>(props, {
42+
updateInterval: props?.options?.interval
43+
})
44+
45+
onBeforeUnmount(pauseUpdate)
46+
</script>
47+
```
48+
:::
49+
50+
#### 3. Написание переводов
51+
52+
Если в компоненте используется статическй текст, то его необходимо вынести в файл переводов.
53+
Обязательным является добавление `en-US.json` переводов, остальные по желанию.
54+
55+
::: code-group
56+
```json [locales/ru-RU.json]
57+
{
58+
"service": {
59+
"bitcoin": { // [!code focus]
60+
"title": "Курс {code}", // [!code focus]
61+
"description": "Равен {rate}" // [!code focus]
62+
} // [!code focus]
63+
}
64+
}
65+
```
66+
:::
67+
68+
Переводы основываются на [vue-i18n](https://vue-i18n.intlify.dev/). Доступны абсолютно все возможности.
69+
70+
#### 4. Получение данных
71+
72+
::: code-group
73+
```typescript [server/api/services/bitcoin.ts]
74+
import type { BitcoinService } from '~/types'
75+
76+
export default defineEventHandler(async (event): Promise<{ rate: string }> => {
77+
const service = await getService<BitcoinService>(event)
78+
79+
try {
80+
const data = await $fetch('https://api.coindesk.com/v1/bpi/currentprice.json', {
81+
parseResponse: (text) => JSON.parse(text)
82+
})
83+
84+
return {
85+
rate: data.bpi[service.option.code].rate
86+
}
87+
} catch (e) {
88+
logger.error(e)
89+
}
90+
91+
return {
92+
rate: '-'
93+
}
94+
})
95+
```
96+
:::
97+
98+
#### 5. Обновление документации
99+
100+
Не забывайте добавить сервис в документацию, чтобы другие пользователи были в курсе и могли его использовать.
101+
102+
Для этого создайте файлы:
103+
104+
* `docs/services/bitcoin.md`
105+
* `docs/{lang}/services/bitcoin.md` - можно оставить пустыми
106+
107+
## Создание темы оформления
108+
109+
#### 1. Добавление CSS переменных
110+
111+
::: code-group
112+
```css [assets/style/tailwind.css]
113+
html.new-theme {
114+
--fg: 67 52 34;
115+
--fg-dimmed: 80 66 49;
116+
--background: 241 231 208;
117+
}
118+
```
119+
:::
120+
121+
#### 2. Добавление в Config
122+
123+
::: code-group
124+
```typescript [types/config.d.ts]
125+
export interface Config {
126+
title?: string
127+
lang: 'en' | 'ru'
128+
theme?: 'system' | 'light' | 'dark' | 'deep' | 'new-theme' // [!code focus]
129+
services: ServicesGroup[]
130+
checkUpdates: boolean
131+
}
132+
```
133+
:::
134+
135+
#### 3. Обновление документации
136+
137+
Не забывайте добавить `new-theme` в документацию, чтобы другие пользователи были в курсе вашей темы.
138+
139+
Для этого найтие секцию с темой оформления во всех переводах и добавьте новый параметр:
140+
141+
* `docs/reference/configuration.md`
142+
* `docs/{lang}/reference/configuration.md`
143+
144+
## Написание переводов
145+
146+
#### 1. Создание новый языковой файл
147+
148+
Создайте новый файл в папке `locales`. Рекомендуем скопировать `locales/en-US.json` и на его основе сделать перевод.
149+
150+
#### 2. Подключение файла
151+
152+
После создания языкового файла необходимо подключить его в `nuxt.config.ts`
153+
154+
```typescript
155+
export default defineNuxtConfig({
156+
i18n: {
157+
locales: [
158+
{ // [!code focus]
159+
code: 'en', // [!code focus]
160+
iso: 'en-US', // [!code focus]
161+
name: 'English', // [!code focus]
162+
file: 'en-US.json', // [!code focus]
163+
}, // [!code focus]
164+
],
165+
},
166+
})
167+
```
168+
169+
#### 3. Обновление документации
170+
171+
Не забывайте добавить новый язык в документацию, чтобы другие пользователи были в курсе перевода.
172+
173+
Для этого найтие секцию с языком во всех переводах и добавьте новый параметр:
174+
175+
* `docs/reference/configuration.md`
176+
* `docs/{lang}/reference/configuration.md`
177+
178+
## Обновление зависимостей
179+
180+
В этом нет необходимости. На проекте подключен [Dependabot](https://github.com/dependabot), который раз в неделю сканирует новые зависимости.
181+
Но если все же у вас есть такая необходимость, то выполните команду `yarn upgrade`. После чего проверьте все, что
182+
было обновлено.
183+
184+
После того как вы убедитесь в работоспособности приложения, создайте новый `pull request`.

0 commit comments

Comments
 (0)