@intlayer/docs 9.3.1 → 9.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/eslint.md +336 -0
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/bn/eslint.md +336 -0
- package/docs/cs/eslint.md +336 -0
- package/docs/de/eslint.md +336 -0
- package/docs/en/eslint.md +336 -0
- package/docs/en-GB/eslint.md +336 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +32 -35
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/es/eslint.md +336 -0
- package/docs/fr/eslint.md +336 -0
- package/docs/hi/eslint.md +336 -0
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/hi/intlayer_with_vite+svelte.md +2 -2
- package/docs/id/eslint.md +336 -0
- package/docs/it/eslint.md +336 -0
- package/docs/ja/eslint.md +336 -0
- package/docs/ja/intlayer_with_react_router_v7.md +1 -146
- package/docs/ja/intlayer_with_vite+react.md +5 -1
- package/docs/ko/eslint.md +336 -0
- package/docs/ko/intlayer_with_lynx+react.md +4 -0
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/ko/intlayer_with_storybook.md +5 -5
- package/docs/nl/eslint.md +336 -0
- package/docs/pl/eslint.md +336 -0
- package/docs/pl/intlayer_with_astro.md +1 -114
- package/docs/pl/migration_from_i18next_to_intlayer.md +4 -0
- package/docs/pl/migration_from_next-i18next_to_intlayer.md +8 -4
- package/docs/pl/migration_from_next-intl_to_intlayer.md +11 -5
- package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +8 -4
- package/docs/pl/migration_from_react-i18next_to_intlayer.md +8 -4
- package/docs/pl/migration_from_vue-i18n_to_intlayer.md +4 -0
- package/docs/pt/eslint.md +336 -0
- package/docs/pt/intlayer_with_astro.md +1 -114
- package/docs/ru/eslint.md +336 -0
- package/docs/tr/eslint.md +336 -0
- package/docs/uk/eslint.md +336 -0
- package/docs/uk/packages/angular-intlayer/exports.md +2 -2
- package/docs/ur/eslint.md +336 -0
- package/docs/vi/eslint.md +336 -0
- package/docs/zh/eslint.md +336 -0
- package/docs/zh/intlayer_with_create_react_app.md +4 -0
- package/docs/zh/intlayer_with_lynx+react.md +4 -0
- package/docs/zh/intlayer_with_nextjs_14.md +0 -2
- package/docs/zh/intlayer_with_nextjs_15.md +0 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +0 -2
- package/docs/zh/intlayer_with_nuxt.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +4 -0
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +4 -0
- package/docs/zh/intlayer_with_solid_start.md +1 -1
- package/docs/zh/intlayer_with_vite+vue.md +0 -2
- package/docs/zh-TW/eslint.md +336 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
|
@@ -50,14 +50,14 @@ import "angular-intlayer";
|
|
|
50
50
|
### Хуки
|
|
51
51
|
|
|
52
52
|
| Хук | Опис | Пов'язаний документ |
|
|
53
|
-
| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
54
54
|
| `useIntlayer` | На основі `useDictionary`, але інжектує оптимізовану версію словника з згенерованої декларації. | - |
|
|
55
55
|
| `useDictionary` | Обробляє об'єкти, що схожі на словники (ключ, вміст). Обробляє переклади `t()`, перелічення (enumerations) тощо. | - |
|
|
56
56
|
| `useDictionaryAsync` | Те саме, що `useDictionary`, але працює з асинхронними словниками. | - |
|
|
57
57
|
| `useDictionaryDynamic` | Те саме, що `useDictionary`, але працює з динамічними словниками. | - |
|
|
58
58
|
| `useLocale` | Повертає поточну локаль і функцію для її встановлення. | - |
|
|
59
59
|
| `usePathname` | Повертає поточний шлях як `Signal<string>` з видаленим сегментом локалі. Реакгує на `popstate` через `DestroyRef`. | [usePathname](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/angular-intlayer/usePathname.md) |
|
|
60
|
-
| `useIntl` | Повертає об'єкт Intl для поточної локалі. | - |
|
|
60
|
+
| `useIntl` | Повертає об'єкт Intl для поточної локалі. | - |
|
|
61
61
|
| `useLoadDynamic` | Хук для завантаження динамічних словників. | - |
|
|
62
62
|
|
|
63
63
|
### Компоненти
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-08-12
|
|
3
|
+
updatedAt: 2026-08-12
|
|
4
|
+
title: ESLint پلگ ان | Intlayer کے لیے لنٹ قواعد
|
|
5
|
+
description: eslint-plugin-intlayer کے ذریعے ہارڈ کوڈ شدہ سٹرنگز، ایسی ڈائنامک کالز جنہیں Intlayer کمپائلر بہتر نہیں بنا سکتا، اور غیر استعمال شدہ ڈکشنری مواد کو پکڑیں۔ React، Vue، Svelte، Angular اور Astro میں ESLint اور oxlint کے ساتھ کام کرتا ہے۔
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- ESLint
|
|
9
|
+
- oxlint
|
|
10
|
+
- لنٹنگ
|
|
11
|
+
- i18n
|
|
12
|
+
- بین الاقوامیت
|
|
13
|
+
- no-raw-text
|
|
14
|
+
- ہارڈ کوڈ شدہ سٹرنگز
|
|
15
|
+
- غیر استعمال شدہ ترجمے
|
|
16
|
+
- غیر فعال مواد
|
|
17
|
+
- React
|
|
18
|
+
- Vue
|
|
19
|
+
- Svelte
|
|
20
|
+
- Angular
|
|
21
|
+
slugs:
|
|
22
|
+
- doc
|
|
23
|
+
- eslint
|
|
24
|
+
history:
|
|
25
|
+
- version: 9.3.1
|
|
26
|
+
date: 2026-08-12
|
|
27
|
+
changes: "ابتدائی تاریخ"
|
|
28
|
+
author: aymericzip
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# ESLint x OXLint پلگ ان
|
|
32
|
+
|
|
33
|
+
`eslint-plugin-intlayer` ان i18n غلطیوں کو پکڑتا ہے جنہیں TypeScript نہیں پکڑ سکتا:
|
|
34
|
+
|
|
35
|
+
1. **ہارڈ کوڈ شدہ متن (Hardcoded text)** جو کبھی ڈکشنری میں شامل نہیں ہوا۔
|
|
36
|
+
2. **ڈائنامک کالز (Dynamic calls)** جو ٹائپ چیک پاس کرتی ہیں اور چلتی ہیں، لیکن Intlayer کمپائلر انہیں آپٹمائز نہیں کر سکتا۔
|
|
37
|
+
3. **غیر فعال مواد (Dead content)** — ڈکشنریز اور فیلڈز جنہیں پروجیکٹ میں کہیں بھی نہیں پڑھا جاتا (آپٹ ان)۔
|
|
38
|
+
|
|
39
|
+
نامعلوم ڈکشنری کیز، نامعلوم فیلڈ پاتھز اور غائب لوکیلز پہلے ہی کمپائل نقائص ہیں، اس لیے پلگ ان ان کو دوبارہ رپورٹ نہیں کرتا۔
|
|
40
|
+
|
|
41
|
+
## انسٹالیشن
|
|
42
|
+
|
|
43
|
+
```bash packageManager="npm"
|
|
44
|
+
npm install --save-dev eslint-plugin-intlayer
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```bash packageManager="pnpm"
|
|
48
|
+
pnpm add --save-dev eslint-plugin-intlayer
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```bash packageManager="yarn"
|
|
52
|
+
yarn add --dev eslint-plugin-intlayer
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
ESLint 9 یا اس سے نیا ورژن (flat config) درکار ہے۔
|
|
56
|
+
|
|
57
|
+
## استعمال
|
|
58
|
+
|
|
59
|
+
یہ پلگ ان ESLint اور [oxlint](https://oxc.rs) دونوں میں یکساں قواعد اور اختیارات کے ساتھ کام کرتا ہے۔
|
|
60
|
+
|
|
61
|
+
<Tabs defaultTab="eslint">
|
|
62
|
+
<Tab label="ESLint" value="eslint">
|
|
63
|
+
|
|
64
|
+
```javascript fileName="eslint.config.mjs" codeFormat="esm"
|
|
65
|
+
import intlayer from "eslint-plugin-intlayer";
|
|
66
|
+
|
|
67
|
+
export default [...intlayer.configs.recommended];
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
یا قواعد کو ایک ایک کر کے فعال کریں:
|
|
71
|
+
|
|
72
|
+
```javascript fileName="eslint.config.mjs" codeFormat="esm"
|
|
73
|
+
import intlayer from "eslint-plugin-intlayer";
|
|
74
|
+
|
|
75
|
+
export default [
|
|
76
|
+
{
|
|
77
|
+
plugins: { intlayer },
|
|
78
|
+
rules: {
|
|
79
|
+
"intlayer/no-raw-text": "warn",
|
|
80
|
+
"intlayer/static-dictionary-key": "error",
|
|
81
|
+
"intlayer/no-dynamic-field-access": "error",
|
|
82
|
+
"intlayer/enforce-adapter-import": "warn",
|
|
83
|
+
"intlayer/no-unused-content": "warn",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
</Tab>
|
|
90
|
+
<Tab label="oxlint" value="oxlint">
|
|
91
|
+
|
|
92
|
+
```json fileName=".oxlintrc.json"
|
|
93
|
+
{
|
|
94
|
+
"jsPlugins": ["eslint-plugin-intlayer"],
|
|
95
|
+
"rules": {
|
|
96
|
+
"intlayer/no-raw-text": "warn",
|
|
97
|
+
"intlayer/static-dictionary-key": "error",
|
|
98
|
+
"intlayer/no-dynamic-field-access": "error",
|
|
99
|
+
"intlayer/enforce-adapter-import": "warn"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
دو اہم باتیں: oxlint کی JS پلگ ان سپورٹ ابھی الفا مرحلے میں ہے، اور oxlint کسٹم پارسرز کو سپورٹ نہیں کرتا — لہذا `.vue`، `.svelte`، `.astro` اور Angular ٹیمپلیٹس وہاں لنٹ نہیں ہوتے۔ اپنی JS/TS/JSX فائلوں پر oxlint چلائیں اور باقی کے لیے ESLint برقرار رکھیں۔
|
|
105
|
+
|
|
106
|
+
`no-unused-content` کو اوپر جان بوجھ کر چھوڑ دیا گیا ہے: اسے رول سیاق و سباق سے ورکنگ ڈائرکٹری اور لنٹ شدہ فائل پاتھ کی ضرورت ہوتی ہے، جس کی الفا JS پلگ ان برج ضمانت نہیں دیتا۔ اسے ESLint کے تحت چلائیں۔
|
|
107
|
+
|
|
108
|
+
</Tab>
|
|
109
|
+
</Tabs>
|
|
110
|
+
|
|
111
|
+
### کنفیگریشنز (Configs)
|
|
112
|
+
|
|
113
|
+
| کنفیگ | `no-raw-text` | `static-dictionary-key` | `no-dynamic-field-access` | `enforce-adapter-import` | `no-unused-content` |
|
|
114
|
+
| --------------- | ----------------------- | ----------------------- | ------------------------- | ------------------------ | ------------------- |
|
|
115
|
+
| `recommended` | warn | error | error | off | off |
|
|
116
|
+
| `strict` | error (+ نان JSX لٹرلز) | error | error | error | off |
|
|
117
|
+
| `contract-only` | off | error | error | off | off |
|
|
118
|
+
|
|
119
|
+
`recommended` جان بوجھ کر `no-raw-text` کو `warn` پر رکھتا ہے: اسے کسی موجودہ کوڈ بیس پر لاگو کرنے سے تمام غیر ترجمہ شدہ سٹرنگز ایک ساتھ سامنے آ جاتی ہیں، جس سے پہلے ہی دن آپ کا بلڈ فیل نہیں ہونا چاہیے۔
|
|
120
|
+
|
|
121
|
+
`enforce-adapter-import` پہلے سے غیر فعال ہے — اگر آپ چاہیں تو اسے واضح طور پر فعال کریں۔
|
|
122
|
+
|
|
123
|
+
`no-unused-content` ہر کنفیگ میں بند ہے، بشمول `strict`۔ یہ واحد قاعدہ ہے جو آپ کی Intlayer کنفیگریشن کو پڑھتا ہے اور ڈسک سے آپ کی سورس فائلوں کو اسکین کرتا ہے، اس لیے اسے آن کرنا ایک دانستہ انتخاب ہونا چاہیے۔
|
|
124
|
+
|
|
125
|
+
## قواعد
|
|
126
|
+
|
|
127
|
+
### `no-raw-text`
|
|
128
|
+
|
|
129
|
+
صارف کے سامنے آنے والے ایسے متن کی رپورٹ کرتا ہے جو ڈکشنری میں ڈکلیئر نہیں ہے۔ یہ `intlayer extract` جیسی شناخت استعمال کرتا ہے، اس لیے برانڈ نام، CSS کلاسز اور تکنیکی شناخت کنندگان کو نظر انداز کر دیا جاتا ہے۔
|
|
130
|
+
|
|
131
|
+
```jsx
|
|
132
|
+
// ✗ رپورٹ کیا گیا
|
|
133
|
+
<h1>Welcome to our documentation</h1>
|
|
134
|
+
<input placeholder="Enter your email address" />
|
|
135
|
+
|
|
136
|
+
// ✓ درست
|
|
137
|
+
const { title } = useIntlayer("home");
|
|
138
|
+
<h1>{title}</h1>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
مواد کے اعلامیہ کی فائلیں (`*.content.ts`, …) چھوڑ دی جاتی ہیں۔
|
|
142
|
+
|
|
143
|
+
ایک ساتھ پوری فائل کو ٹھیک کرنے کے لیے، `npx intlayer extract` چلائیں اور کمپائلر کو سٹرنگز کو ڈکشنری میں منتقل کرنے دیں۔
|
|
144
|
+
|
|
145
|
+
**اختیارات**
|
|
146
|
+
|
|
147
|
+
```javascript fileName="eslint.config.mjs" codeFormat="esm"
|
|
148
|
+
{
|
|
149
|
+
"intlayer/no-raw-text": [
|
|
150
|
+
"warn",
|
|
151
|
+
{
|
|
152
|
+
// وہ اوصاف جن کی قدر صارف کے سامنے آنے والا متن ہے۔
|
|
153
|
+
// ڈیفالٹ: title, placeholder, alt, aria-label, label
|
|
154
|
+
attributes: ["title", "placeholder", "alt", "aria-label", "label"],
|
|
155
|
+
|
|
156
|
+
// وہ عناصر جن کا مواد کبھی بھی صارف کے سامنے آنے والا متن نہیں ہوتا۔
|
|
157
|
+
// ڈیفالٹ: code, pre, script, style
|
|
158
|
+
ignoreElements: ["code", "pre", "script", "style"],
|
|
159
|
+
|
|
160
|
+
// کبھی رپورٹ نہ کیے جانے والے متن کے ریگولر ایکسپریشنز۔
|
|
161
|
+
ignorePatterns: ["^Powered by"],
|
|
162
|
+
|
|
163
|
+
// مارک اپ سے باہر سٹرنگ لٹرلز کی بھی رپورٹ کریں۔ ڈیفالٹ: false
|
|
164
|
+
includeStringLiterals: false,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### `static-dictionary-key`
|
|
171
|
+
|
|
172
|
+
ڈکشنری کی کے سٹرنگ لٹرل ہونے کا تقاضا کرتا ہے۔
|
|
173
|
+
|
|
174
|
+
کمپائلر صرف اسی صورت میں ڈکشنری کو پری لوڈ کر سکتا ہے جب وہ کال سائٹ پر براہ راست کی کو پڑھ سکے۔ حسابی کی کے ساتھ یہ خاموشی سے اصلاح کو چھوڑ دیتا ہے اور اس کے بجائے ہر ڈکشنری کو بنڈل کر دیتا ہے۔
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// ✗ رپورٹ کیا گیا
|
|
178
|
+
useIntlayer(dictionaryKey);
|
|
179
|
+
useIntlayer(`home-${suffix}`);
|
|
180
|
+
getTranslations({ namespace: page });
|
|
181
|
+
|
|
182
|
+
// ✗ متغیر اب بھی لٹرل نہیں ہے
|
|
183
|
+
const key = "home";
|
|
184
|
+
useIntlayer(key);
|
|
185
|
+
|
|
186
|
+
// ✓ درست
|
|
187
|
+
useIntlayer("home");
|
|
188
|
+
getTranslations({ namespace: "home" });
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
یہ `useIntlayer`، `getIntlayer` اور ہر مطابقت پذیر اڈاپٹر (`useTranslation`، `useTranslations`، `formatMessage`، `<FormattedMessage id>`، `<Trans i18nKey>`، …) پر لاگو ہوتا ہے۔
|
|
192
|
+
|
|
193
|
+
### `no-dynamic-field-access`
|
|
194
|
+
|
|
195
|
+
ڈکشنری سے پڑھی جانے والی فیلڈ کے جامد طور پر معلوم ہونے کا تقاضا کرتا ہے۔
|
|
196
|
+
|
|
197
|
+
کمپائلر ان فیلڈز کو ہٹا دیتا ہے جنہیں وہ استعمال ہوتے ہوئے نہیں دیکھتا۔ ایک حسابی رسائی اس کے لیے غیر مرئی ہوتی ہے، اس لیے رن ٹائم پر پڑھنا `undefined` واپس کر سکتا ہے۔
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
// ✗ رپورٹ کیا گیا
|
|
201
|
+
const content = useIntlayer("home");
|
|
202
|
+
content[fieldName];
|
|
203
|
+
|
|
204
|
+
const t = useTranslations("home");
|
|
205
|
+
t(messageKey);
|
|
206
|
+
|
|
207
|
+
// ✓ درست
|
|
208
|
+
content.title;
|
|
209
|
+
content["title"];
|
|
210
|
+
content.items[0];
|
|
211
|
+
t("hero.title");
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### `enforce-adapter-import`
|
|
215
|
+
|
|
216
|
+
اصل پیکیج کے مقابلے `@intlayer/*` مطابقت پذیر اڈاپٹر کو ترجیح دیتا ہے۔ اصل پیکیج صرف اس وقت Intlayer پر حل ہوتا ہے جب بنڈلر عرف تشکیل دیا گیا ہو؛ اڈاپٹر ہمیشہ حل ہوتا ہے۔ `--fix` کے ساتھ خودکار طور پر درست کیا جا سکتا ہے۔
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// ✗ رپورٹ کیا گیا
|
|
220
|
+
import { useTranslation } from "react-i18next";
|
|
221
|
+
import { getTranslations } from "next-intl/server";
|
|
222
|
+
|
|
223
|
+
// ✓ درست
|
|
224
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
225
|
+
import { getTranslations } from "@intlayer/next-intl/server";
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### `no-unused-content`
|
|
229
|
+
|
|
230
|
+
**پہلے سے غیر فعال ہے۔** ایسے مواد کی رپورٹ کرتا ہے جسے پروجیکٹ میں کوئی نہیں پڑھتا، نیز ایک سے زیادہ جگہوں پر ڈکلیئر کی گئی ڈکشنری کیز۔
|
|
231
|
+
|
|
232
|
+
```typescript fileName="src/home.content.ts"
|
|
233
|
+
export default {
|
|
234
|
+
key: "home", // ✗ تب رپورٹ ہوتا ہے جب پروجیکٹ میں کوئی "home" کی درخواست نہیں کرتا
|
|
235
|
+
content: {
|
|
236
|
+
title: t({ ur: "عنوان", en: "Title" }),
|
|
237
|
+
|
|
238
|
+
// ✗ جب کوئی چیز `hero` نہیں پڑھتی تو رپورٹ ہوتا ہے
|
|
239
|
+
hero: {
|
|
240
|
+
subtitle: t({ ur: "ذیلی عنوان", en: "Subtitle" }),
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
دوسرے قواعد کے برعکس، یہ قاعدہ صرف سامنے موجود فائل سے فیصلہ نہیں کر سکتا — ایک فیلڈ صرف پورے پروجیکٹ کے تناظر میں غیر استعمال شدہ ہوتی ہے۔ لنٹ رن کے پہلے مواد کے اعلان پر یہ آپ کی Intlayer کنفیگریشن لوڈ کرتا ہے، ان سورس فائلوں کو اسکین کرتا ہے جن کا وہ کنفیگریشن اعلان کرتی ہے (`build.traversePattern`, `compiler.transformPattern`) اور وہی تجزیہ کار چلاتا ہے جو `@intlayer/lsp` اور VS Code ایکسٹینشن میں "غیر استعمال شدہ" کو سپورٹ کرتا ہے۔ نتیجہ `cacheTtl` ملی سیکنڈ کے لیے محفوظ ہوتا ہے، اس لیے اسکین ہر فائل کے بجائے فی رن ایک بار ہوتا ہے۔
|
|
247
|
+
|
|
248
|
+
**اختیارات**
|
|
249
|
+
|
|
250
|
+
```javascript fileName="eslint.config.mjs" codeFormat="esm"
|
|
251
|
+
{
|
|
252
|
+
"intlayer/no-unused-content": [
|
|
253
|
+
"warn",
|
|
254
|
+
{
|
|
255
|
+
// ان ڈکشنری کیز کی رپورٹ کریں جن کا کوئی حوالہ نہیں ہے۔ ڈیفالٹ: true
|
|
256
|
+
reportUnusedDictionaries: true,
|
|
257
|
+
|
|
258
|
+
// ان فیلڈز کی رپورٹ کریں جنہیں کچھ نہیں پڑھتا۔ ڈیفالٹ: true
|
|
259
|
+
reportUnusedFields: true,
|
|
260
|
+
|
|
261
|
+
// ایک سے زیادہ جگہوں پر ڈکلیئر کیز کی رپورٹ کریں۔ ڈیفالٹ: true
|
|
262
|
+
reportDuplicateKeys: true,
|
|
263
|
+
|
|
264
|
+
// فیلڈ پاتھز کے ریگولر ایکسپریشنز جنہیں کبھی رپورٹ نہیں کیا جائے گا۔
|
|
265
|
+
ignoreFields: ["^meta"],
|
|
266
|
+
|
|
267
|
+
// پروجیکٹ روٹ جہاں سے اسکین شروع ہوتا ہے۔ ڈیفالٹ: ESLint کی ورکنگ ڈائرکٹری
|
|
268
|
+
baseDir: process.cwd(),
|
|
269
|
+
|
|
270
|
+
// ایک پروجیکٹ اسکین کو کتنی دیر تک دوبارہ استعمال کیا جائے گا (ms میں)۔ ڈیفالٹ: 30000
|
|
271
|
+
cacheTtl: 30000,
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
جب آپ طویل مدتی ایڈیٹر سرور سے لنٹ کر رہے ہوں اور چاہتے ہیں کہ ترامیم جلد نظر آئیں تو `cacheTtl` کو کم کریں؛ جب ایک ہی لنٹ رن ایک مونوریپو میں متعدد Intlayer پروجیکٹس پر محیط ہو تو `baseDir` سیٹ کریں۔
|
|
278
|
+
|
|
279
|
+
> **یہ خاموش رہنے کو ترجیح دیتا ہے۔** یہاں غلط مثبت رپورٹ ایک ترجمہ کو حذف کر سکتی ہے، اس لیے جب ڈکشنری کو ایسے طریقے سے استعمال کیا جاتا ہے جسے تجزیہ ٹریک نہیں کر سکتا تو کچھ بھی رپورٹ نہیں کیا جاتا: پورا مواد کا آبجیکٹ پاس کرنا، اس سے منسلک ٹرانسلیٹر فنکشن (`const t = useTranslations("home")`)، براہ راست درآمد کے ذریعے رسائی حاصل کردہ اعلان (`useDictionary(myDictionary)`)، کسی دوسری ڈکشنری سے `nest()`، یا اسپرڈ آپریٹر کی وجہ سے غیر جامع بنائی گئی فیلڈ لسٹ۔ سنگل فائل اجزاء (`.vue`, `.svelte`, `.astro`) کو ان تمام فیلڈز کا استعمال کرتے ہوئے شمار کیا جاتا ہے جن کا وہ ذکر کرتے ہیں، کیونکہ ان کے اسکرپٹ بلاکس یہاں پارس نہیں ہوتے۔
|
|
280
|
+
|
|
281
|
+
`reportDuplicateKeys` ان ان مرجڈ ڈکشنریز کو پڑھتا ہے جنہیں بلڈ `.intlayer/` کے تحت لکھتا ہے، اس لیے یہ تب تک خاموش رہتا ہے جب تک کہ پروجیکٹ کو کم از کم ایک بار بلڈ نہ کیا جائے۔ دو اعلانات جو ایک کی کا اشتراک کرتے ہیں وہ ضم ہو جاتے ہیں، جو کہ ایک درست پیٹرن ہے — رپورٹ اس لیے موجود ہے کیونکہ دونوں طرف بیان کردہ فیلڈ خاموشی سے صرف ایک قدر رکھتی ہے۔
|
|
282
|
+
|
|
283
|
+
تجزیہ کار `@intlayer/lsp` سے لوڈ ہوتا ہے، جو ESM کے طور پر فراہم کیا جاتا ہے۔ اس لیے قاعدے کے لیے ایسے Node ورژن کی ضرورت ہوتی ہے جو ES ماڈیول کو `require()` کر سکے — Node 20.19+ یا 22.12+۔ پرانے ورژنز پر یہ لنٹ رن کو فیل کرنے کے بجائے کچھ بھی رپورٹ نہیں کرتا۔
|
|
284
|
+
|
|
285
|
+
## فریم ورکس
|
|
286
|
+
|
|
287
|
+
ہر قاعدہ تمام Intlayer انٹیگریشنز میں کام کرتا ہے، بشمول Vue، Svelte اور Angular ٹیمپلیٹس۔ آپ کو صرف ESLint کو بتانے کی ضرورت ہے کہ کون سا پارسر ہر فائل کی قسم کو پڑھتا ہے۔
|
|
288
|
+
|
|
289
|
+
| فریم ورک | فائلیں | پارسر (Parser) |
|
|
290
|
+
| ------------------------- | ----------------- | --------------------------------- |
|
|
291
|
+
| React, Preact, Solid, Lit | `.jsx` `.tsx` | `typescript-eslint` |
|
|
292
|
+
| Next.js | `.jsx` `.tsx` | `typescript-eslint` |
|
|
293
|
+
| Vue, Nuxt | `.vue` | `vue-eslint-parser` |
|
|
294
|
+
| Svelte, SvelteKit | `.svelte` | `svelte-eslint-parser` |
|
|
295
|
+
| Angular | `.ts` | `typescript-eslint` |
|
|
296
|
+
| Angular ٹیمپلیٹس | `.component.html` | `@angular-eslint/template-parser` |
|
|
297
|
+
| Astro | `.astro` | `astro-eslint-parser` |
|
|
298
|
+
|
|
299
|
+
```javascript fileName="eslint.config.mjs" codeFormat="esm"
|
|
300
|
+
import intlayer from "eslint-plugin-intlayer";
|
|
301
|
+
import tseslint from "typescript-eslint";
|
|
302
|
+
import vueParser from "vue-eslint-parser";
|
|
303
|
+
import svelteParser from "svelte-eslint-parser";
|
|
304
|
+
import angularTemplateParser from "@angular-eslint/template-parser";
|
|
305
|
+
|
|
306
|
+
export default [
|
|
307
|
+
...intlayer.configs.recommended,
|
|
308
|
+
|
|
309
|
+
{
|
|
310
|
+
files: ["**/*.{ts,tsx,jsx}"],
|
|
311
|
+
languageOptions: { parser: tseslint.parser },
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
files: ["**/*.vue"],
|
|
315
|
+
languageOptions: {
|
|
316
|
+
parser: vueParser,
|
|
317
|
+
parserOptions: { parser: tseslint.parser },
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
files: ["**/*.svelte"],
|
|
322
|
+
languageOptions: {
|
|
323
|
+
parser: svelteParser,
|
|
324
|
+
parserOptions: { parser: tseslint.parser },
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
files: ["**/*.component.html"],
|
|
329
|
+
languageOptions: { parser: angularTemplateParser },
|
|
330
|
+
},
|
|
331
|
+
];
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
صرف وہی پارسر انسٹال کریں جن کی آپ کے پروجیکٹ کو ضرورت ہے۔
|
|
335
|
+
|
|
336
|
+
> **معلوم حد بندی۔** Vue اور Angular ٹیمپلیٹس میں `{{ content[key] }}` جیسے ایکسپریشن کو `no-dynamic-field-access` کے ذریعے چیک نہیں کیا جاتا۔ اسکرپٹ بلاک کے اندر لکھی گئی ڈائنامک ریڈنگز معمول کے مطابق پکڑی جاتی ہیں۔
|