lighthouse-cli 0.16.0__py3-none-any.whl
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.
- lighthouse/__init__.py +6 -0
- lighthouse/__main__.py +9 -0
- lighthouse/commands/__init__.py +0 -0
- lighthouse/commands/agents.py +310 -0
- lighthouse/commands/builds.py +85 -0
- lighthouse/commands/collectors.py +147 -0
- lighthouse/commands/connect.py +717 -0
- lighthouse/commands/connections.py +201 -0
- lighthouse/commands/evals.py +198 -0
- lighthouse/commands/kb.py +224 -0
- lighthouse/commands/language.py +56 -0
- lighthouse/commands/limits.py +61 -0
- lighthouse/commands/login.py +207 -0
- lighthouse/commands/models.py +61 -0
- lighthouse/commands/runs.py +157 -0
- lighthouse/commands/spend.py +84 -0
- lighthouse/commands/stack.py +103 -0
- lighthouse/commands/terms.py +50 -0
- lighthouse/commands/whoami.py +80 -0
- lighthouse/config.py +141 -0
- lighthouse/credentials.py +233 -0
- lighthouse/device.py +124 -0
- lighthouse/exits.py +78 -0
- lighthouse/flags.py +61 -0
- lighthouse/http.py +355 -0
- lighthouse/i18n.py +250 -0
- lighthouse/locales/ar.json +343 -0
- lighthouse/locales/de.json +343 -0
- lighthouse/locales/en.json +343 -0
- lighthouse/locales/es.json +343 -0
- lighthouse/locales/fr.json +343 -0
- lighthouse/locales/ga.json +343 -0
- lighthouse/locales/it.json +343 -0
- lighthouse/locales/ja.json +343 -0
- lighthouse/locales/nl.json +343 -0
- lighthouse/locales/pt.json +343 -0
- lighthouse/locales/zh-Hans.json +343 -0
- lighthouse/locales/zh-Hant.json +343 -0
- lighthouse/main.py +229 -0
- lighthouse/out.py +169 -0
- lighthouse/py.typed +0 -0
- lighthouse/sealing.py +448 -0
- lighthouse_cli-0.16.0.dist-info/METADATA +23 -0
- lighthouse_cli-0.16.0.dist-info/RECORD +49 -0
- lighthouse_cli-0.16.0.dist-info/WHEEL +5 -0
- lighthouse_cli-0.16.0.dist-info/entry_points.txt +2 -0
- lighthouse_cli-0.16.0.dist-info/licenses/LICENSE +202 -0
- lighthouse_cli-0.16.0.dist-info/licenses/NOTICE +2 -0
- lighthouse_cli-0.16.0.dist-info/top_level.txt +1 -0
lighthouse/i18n.py
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""The CLI's language: what a person reads, in the language they chose.
|
|
4
|
+
|
|
5
|
+
**Which language.** The first of these that names a supported one:
|
|
6
|
+
|
|
7
|
+
1. `--lang <tag>` on the command line;
|
|
8
|
+
2. `LIGHTHOUSE_LANG` in the environment;
|
|
9
|
+
3. the signed-in person's effective setting (contract 1.29: their own, else
|
|
10
|
+
their organisation's), which `lighthouse whoami` and `lighthouse language`
|
|
11
|
+
keep in `language.json` beside the profile file, per host, so that no
|
|
12
|
+
command needs a request just to know how to print `--help`;
|
|
13
|
+
4. `LC_ALL`, `LC_MESSAGES` or `LANG` (`fr_FR.UTF-8` is `fr`);
|
|
14
|
+
5. `en`, British English, the source of every text.
|
|
15
|
+
|
|
16
|
+
**What is translated**: help, prompts, errors, table headers and labels, the
|
|
17
|
+
chrome around output. **What never is**: `--json` output (every key and every
|
|
18
|
+
value the service sent), option names, exit codes, the `error` code in an error
|
|
19
|
+
document, command names, and the product names LightHouse and Octy.
|
|
20
|
+
|
|
21
|
+
Catalogues are JSON, one per tag, in `lighthouse/locales/`: flat, dotted keys,
|
|
22
|
+
`{placeholders}` that every language keeps. `en.json` is the source; the others
|
|
23
|
+
are machine-drafted and pending native review. A key a language lacks falls
|
|
24
|
+
back to English, then to the key itself, so a missing translation never breaks
|
|
25
|
+
a command. `service/scripts/i18n_lint.py` and `tests/test_i18n.py` hold every
|
|
26
|
+
catalogue to `en`'s keys and placeholders, and every `t("key")` in the code to
|
|
27
|
+
a key `en` has.
|
|
28
|
+
|
|
29
|
+
The language is process-wide state set once per run by `main()` (`use`), so a
|
|
30
|
+
command, the argument parser, `Out` and an error built deep inside the HTTP
|
|
31
|
+
client all speak the same one without it being threaded through.
|
|
32
|
+
"""
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import argparse
|
|
36
|
+
import json
|
|
37
|
+
import re
|
|
38
|
+
from collections.abc import Mapping
|
|
39
|
+
from functools import cache
|
|
40
|
+
from pathlib import Path
|
|
41
|
+
from typing import Any
|
|
42
|
+
|
|
43
|
+
FALLBACK = "en"
|
|
44
|
+
# The same list as the service's (aal_control/languages.py); a test holds the two equal.
|
|
45
|
+
TAGS = ("en", "fr", "de", "es", "it", "pt", "nl", "ga", "ja", "zh-Hans", "zh-Hant", "ar")
|
|
46
|
+
ENV_LANG = "LIGHTHOUSE_LANG"
|
|
47
|
+
LOCALES = Path(__file__).parent / "locales"
|
|
48
|
+
CACHE_FILE = "language.json"
|
|
49
|
+
_PLACEHOLDER = re.compile(r"\{([a-z_][a-z0-9_]*)\}")
|
|
50
|
+
|
|
51
|
+
_current = FALLBACK
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@cache
|
|
55
|
+
def catalogue(tag: str) -> Mapping[str, str]:
|
|
56
|
+
path = LOCALES / f"{tag}.json"
|
|
57
|
+
if tag not in TAGS or not path.is_file():
|
|
58
|
+
return {}
|
|
59
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
60
|
+
return {k: v for k, v in data.items() if isinstance(v, str) and not k.startswith("_")}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def normalise(value: Any) -> str | None:
|
|
64
|
+
"""A supported tag for what a person or the environment says, or None:
|
|
65
|
+
the tag itself, or its primary subtag (`fr-CA`, `de_DE.UTF-8`, `ga_IE@euro`).
|
|
66
|
+
Chinese keeps its script: `zh-Hant`, or a Taiwan, Hong Kong or Macao region
|
|
67
|
+
(`zh_TW.UTF-8`), is `zh-Hant`; any other `zh` (`zh`, `zh-CN`, `zh_SG`,
|
|
68
|
+
`zh-Hans-CN`) is `zh-Hans`. Case is ignored."""
|
|
69
|
+
if not isinstance(value, str):
|
|
70
|
+
return None
|
|
71
|
+
parts = [p for p in re.split(r"[-_.@]", value.strip().lower()) if p]
|
|
72
|
+
if not parts:
|
|
73
|
+
return None
|
|
74
|
+
if parts[0] == "zh":
|
|
75
|
+
# Only the subtags before the encoding or modifier (`.UTF-8`, `@euro`) count.
|
|
76
|
+
subtags = re.split(r"[.@]", value.strip().lower())[0].replace("_", "-").split("-")[1:]
|
|
77
|
+
rest = set(subtags)
|
|
78
|
+
if "hant" in rest or ("hans" not in rest and rest & {"tw", "hk", "mo"}):
|
|
79
|
+
return "zh-Hant"
|
|
80
|
+
return "zh-Hans"
|
|
81
|
+
return parts[0] if parts[0] in TAGS else None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def current() -> str:
|
|
85
|
+
return _current
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def use(tag: str | None) -> str:
|
|
89
|
+
"""Speak `tag` from now on (English when it is none of ours)."""
|
|
90
|
+
global _current
|
|
91
|
+
_current = tag if tag in TAGS else FALLBACK
|
|
92
|
+
return _current
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def t(key: str, **values: Any) -> str:
|
|
96
|
+
"""The text for `key` in the current language; English, then the key."""
|
|
97
|
+
text = catalogue(_current).get(key)
|
|
98
|
+
if text is None:
|
|
99
|
+
text = catalogue(FALLBACK).get(key, key)
|
|
100
|
+
return _PLACEHOLDER.sub(lambda m: str(values.get(m.group(1), m.group(0))), text)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def slug(text: str) -> str:
|
|
104
|
+
return re.sub(r"[^a-z0-9]+", "_", text.lower()).strip("_")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def label(text: str) -> str:
|
|
108
|
+
"""A table header or a label of a pair in the current language, when the
|
|
109
|
+
catalogue has one for this English text; as given otherwise (a column
|
|
110
|
+
named after a group-by, a value from the service)."""
|
|
111
|
+
key = f"label.{slug(text)}"
|
|
112
|
+
return t(key) if key in catalogue(_current) else text
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def yes_answers() -> tuple[str, ...]:
|
|
116
|
+
return tuple(a.strip().lower() for a in t("confirm.yes").split(",") if a.strip())
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# -- which language ---------------------------------------------------------------------
|
|
120
|
+
|
|
121
|
+
def cache_path(config_dir: Path) -> Path:
|
|
122
|
+
return config_dir / CACHE_FILE
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def remembered(config_dir: Path, host: str | None) -> str | None:
|
|
126
|
+
"""The viewer's effective language last seen for `host`, if any."""
|
|
127
|
+
if not host:
|
|
128
|
+
return None
|
|
129
|
+
try:
|
|
130
|
+
data = json.loads(cache_path(config_dir).read_text(encoding="utf-8"))
|
|
131
|
+
except (OSError, ValueError):
|
|
132
|
+
return None
|
|
133
|
+
return normalise(data.get(host)) if isinstance(data, dict) else None
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def remember(config_dir: Path, host: str, tag: str | None) -> None:
|
|
137
|
+
"""Keep (or, for a person with none set, forget) the effective language
|
|
138
|
+
for `host`. Best effort: a cache that cannot be written costs nothing."""
|
|
139
|
+
path = cache_path(config_dir)
|
|
140
|
+
try:
|
|
141
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
142
|
+
data = data if isinstance(data, dict) else {}
|
|
143
|
+
except (OSError, ValueError):
|
|
144
|
+
data = {}
|
|
145
|
+
if tag in TAGS:
|
|
146
|
+
data[host] = tag
|
|
147
|
+
else:
|
|
148
|
+
data.pop(host, None)
|
|
149
|
+
try:
|
|
150
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
151
|
+
path.write_text(json.dumps(data, sort_keys=True) + "\n", encoding="utf-8")
|
|
152
|
+
path.chmod(0o600)
|
|
153
|
+
except OSError:
|
|
154
|
+
return
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def from_environment(env: Mapping[str, str]) -> str | None:
|
|
158
|
+
for name in ("LC_ALL", "LC_MESSAGES", "LANG"):
|
|
159
|
+
tag = normalise(env.get(name))
|
|
160
|
+
if tag:
|
|
161
|
+
return tag
|
|
162
|
+
return None
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def flag_in(argv: list[str]) -> str | None:
|
|
166
|
+
"""`--lang` read off the raw command line, before the parser exists (the
|
|
167
|
+
parser's own help has to be in the language). The first occurrence wins."""
|
|
168
|
+
for i, arg in enumerate(argv):
|
|
169
|
+
if arg == "--lang" and i + 1 < len(argv):
|
|
170
|
+
return argv[i + 1]
|
|
171
|
+
if arg.startswith("--lang="):
|
|
172
|
+
return arg.split("=", 1)[1]
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def choose(argv: list[str], env: Mapping[str, str], config_dir: Path | None = None,
|
|
177
|
+
host: str | None = None) -> str:
|
|
178
|
+
"""The run's language, by the order in the module docstring. An
|
|
179
|
+
unsupported `--lang` or `LIGHTHOUSE_LANG` is skipped here (and refused
|
|
180
|
+
by `main` for the flag); it never leaves the CLI mute."""
|
|
181
|
+
for given in (flag_in(argv), env.get(ENV_LANG)):
|
|
182
|
+
tag = normalise(given) if given else None
|
|
183
|
+
if tag:
|
|
184
|
+
return tag
|
|
185
|
+
if config_dir is not None:
|
|
186
|
+
tag = remembered(config_dir, host)
|
|
187
|
+
if tag:
|
|
188
|
+
return tag
|
|
189
|
+
return from_environment(env) or FALLBACK
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
# -- the argument parser -----------------------------------------------------------------
|
|
193
|
+
|
|
194
|
+
def help_key(path: list[str], dest: str) -> str:
|
|
195
|
+
return ".".join(["help", *path, dest])
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def help_strings(root: argparse.ArgumentParser) -> dict[str, str]:
|
|
199
|
+
"""Every help text of the parser tree by catalogue key (`help.<command>...`):
|
|
200
|
+
what `localise` replaces and what `tests/test_i18n.py` holds `en.json` to."""
|
|
201
|
+
found: dict[str, str] = {}
|
|
202
|
+
|
|
203
|
+
def walk(p: argparse.ArgumentParser, path: list[str]) -> None:
|
|
204
|
+
for a in p._actions: # noqa: SLF001 - argparse has no public walk
|
|
205
|
+
if isinstance(a, argparse._SubParsersAction): # noqa: SLF001
|
|
206
|
+
for choice in a._choices_actions: # noqa: SLF001
|
|
207
|
+
if choice.help:
|
|
208
|
+
found[help_key([*path, choice.dest], "_help")] = choice.help
|
|
209
|
+
for name, sub in a.choices.items():
|
|
210
|
+
own = found.get(help_key([*path, name], "_help"))
|
|
211
|
+
if sub.description and sub.description != own:
|
|
212
|
+
found[help_key([*path, name], "_description")] = sub.description
|
|
213
|
+
walk(sub, [*path, name])
|
|
214
|
+
elif (a.help and a.help != argparse.SUPPRESS
|
|
215
|
+
and not isinstance(a, (argparse._HelpAction, argparse._VersionAction))): # noqa: SLF001
|
|
216
|
+
found[help_key(path, a.dest)] = a.help
|
|
217
|
+
|
|
218
|
+
walk(root, [])
|
|
219
|
+
return found
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def localise(root: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
223
|
+
"""Put the current language's help into the parser tree. English is the
|
|
224
|
+
parser's own text, so English changes nothing."""
|
|
225
|
+
if _current == FALLBACK:
|
|
226
|
+
return root
|
|
227
|
+
cat = catalogue(_current)
|
|
228
|
+
|
|
229
|
+
def walk(p: argparse.ArgumentParser, path: list[str]) -> None:
|
|
230
|
+
for a in p._actions: # noqa: SLF001
|
|
231
|
+
if isinstance(a, argparse._SubParsersAction): # noqa: SLF001
|
|
232
|
+
for choice in a._choices_actions: # noqa: SLF001
|
|
233
|
+
key = help_key([*path, choice.dest], "_help")
|
|
234
|
+
if key in cat:
|
|
235
|
+
choice.help = cat[key]
|
|
236
|
+
for name, sub in a.choices.items():
|
|
237
|
+
own = help_key([*path, name], "_help")
|
|
238
|
+
desc = help_key([*path, name], "_description")
|
|
239
|
+
if desc in cat:
|
|
240
|
+
sub.description = cat[desc]
|
|
241
|
+
elif own in cat:
|
|
242
|
+
sub.description = cat[own]
|
|
243
|
+
walk(sub, [*path, name])
|
|
244
|
+
elif a.help and a.help != argparse.SUPPRESS:
|
|
245
|
+
key = help_key(path, a.dest)
|
|
246
|
+
if key in cat:
|
|
247
|
+
a.help = cat[key]
|
|
248
|
+
|
|
249
|
+
walk(root, [])
|
|
250
|
+
return root
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "ar: machine-drafted, pending native review.",
|
|
3
|
+
"main.description": "LightHouse™ من سطر الأوامر: سجّل الدخول، واربط منظومتك، وانشر الوكلاء، وراقب التشغيلات، واطّلع على التكلفة.",
|
|
4
|
+
"main.epilog": "رموز الخروج: 0 نجاح، 1 فشل، 2 خطأ في الاستخدام، 3 لم يتم تسجيل الدخول، 4 ممنوع، 5 أعد المحاولة لاحقاً، 7 يتطلب شخصاً. LightHouse وOcty علامتان تجاريتان لشركة Atlantic Agentic Labs. المستندات: https://docs.atlanticagenticlabs.com/cli/",
|
|
5
|
+
"out.error": "خطأ",
|
|
6
|
+
"out.warning": "تحذير",
|
|
7
|
+
"out.nothing": "(لا شيء)",
|
|
8
|
+
"confirm.suffix": "[y/N]",
|
|
9
|
+
"confirm.yes": "y,yes,نعم",
|
|
10
|
+
"note.stopped": "متوقف",
|
|
11
|
+
"note.waiting_for_approval": "بانتظار الموافقة…",
|
|
12
|
+
"prompt.open_browser": "اضغط Enter لفتح المتصفح، أو Ctrl-C للإيقاف…",
|
|
13
|
+
"prompt.revoke_token": "هل تريد إلغاء الرمز {token}؟",
|
|
14
|
+
"err.not_signed_in": "لم يتم تسجيل الدخول",
|
|
15
|
+
"err.not_signed_in_for": "لم يتم تسجيل الدخول إلى {host}",
|
|
16
|
+
"hint.login": "شغّل `lighthouse login`",
|
|
17
|
+
"hint.login_again": "شغّل `lighthouse login` مرة أخرى",
|
|
18
|
+
"err.needs_a_person": "{what} يتطلب شخصاً أمام لوحة المفاتيح",
|
|
19
|
+
"hint.needs_a_person": "شغّله دون --no-input، أو حدّد القيمة في سطر الأوامر",
|
|
20
|
+
"err.no_host": "لم يتم تحديد مضيف المؤسسة",
|
|
21
|
+
"hint.no_host": "مرّر --host <tenant-id>.atlanticagenticlabs.com، أو عيّن LIGHTHOUSE_HOST، أو شغّل `lighthouse login --host …` مرة واحدة",
|
|
22
|
+
"err.bad_host": "{given} ليس اسم مضيف",
|
|
23
|
+
"hint.bad_host": "استخدم معرّف المؤسسة، أو اسم مضيف البوابة",
|
|
24
|
+
"err.bad_config": "تعذّرت قراءة {path}: {error}",
|
|
25
|
+
"hint.bad_config": "أصلحه، أو احذفه وشغّل `lighthouse login` مرة أخرى",
|
|
26
|
+
"err.pairing_expired": "انتهت صلاحية رمز الإقران قبل الموافقة عليه",
|
|
27
|
+
"err.sign_in_declined": "رُفض تسجيل الدخول في البوابة",
|
|
28
|
+
"err.no_terminal": "لا توجد طرفية للسؤال عليها",
|
|
29
|
+
"hint.no_terminal": "مرّر --yes لفتح المتصفح، أو --no-browser",
|
|
30
|
+
"err.timeout": "انتهت مهلة {method} {path}",
|
|
31
|
+
"err.unreachable": "تعذّر الوصول إلى {host}: {error}",
|
|
32
|
+
"hint.unreachable": "تحقق من اسم المضيف ومن شبكتك",
|
|
33
|
+
"err.not_json": "{method} {path}: أجابت الخدمة بما ليس JSON",
|
|
34
|
+
"err.exhausted": "لم ينجح {method} {path}",
|
|
35
|
+
"err.service_answered": "أجابت الخدمة بالحالة {status}",
|
|
36
|
+
"hint.scope_required": "سجّل الدخول مجدداً بالنطاق الذي يتطلبه هذا، مثلاً `lighthouse login --scope \"telemetry:read agents:read {scope}\"`",
|
|
37
|
+
"err.access_state_wrong": "خاطئ أو لا يملك صلاحية الوصول إلى هذه المؤسسة",
|
|
38
|
+
"err.access_state_missing": "مفقود",
|
|
39
|
+
"err.access_stopped": "أوقف Cloudflare Access الطلب قبل وصوله إلى LightHouse: رمز خدمة Access {state}",
|
|
40
|
+
"hint.access_stopped": "عيّن {id} و{secret} إلى رمز خدمة Access الخاص بالمؤسسة (أو مرّر --access-client-id إلى `lighthouse login`)",
|
|
41
|
+
"err.machine_key_refused": "رُفض مفتاح الآلة في {env}: ربما أُلغي، أو يعود إلى مؤسسة أخرى",
|
|
42
|
+
"hint.machine_key_refused": "تحقق من صفحة المفاتيح في البوابة؛ مفتاح الآلة لا يُجدَّد ولا تنتهي صلاحيته بالوقت",
|
|
43
|
+
"err.delegated_token_refused": "انتهت صلاحية الرمز المفوَّض في {env} أو أُلغي. الرمز المفوَّض (lhat-...) يدوم ثماني ساعات ولا يُجدَّد في خط الإنتاج (pipeline)",
|
|
44
|
+
"hint.delegated_token_refused": "للتكامل المستمر (CI)، أنشئ مفتاح آلة (aalcp-...) من صفحة المفاتيح في البوابة وضعه في {env}، مع رمز خدمة Access الخاص بالمؤسسة",
|
|
45
|
+
"err.access_token_incomplete": "رمز خدمة Cloudflare Access معيَّن جزئياً: {missing} مفقود",
|
|
46
|
+
"hint.access_token_incomplete": "عيّن كلاً من {id} و{secret}",
|
|
47
|
+
"err.access_secret_empty": "تم تمرير --access-client-secret-stdin لكن الإدخال القياسي كان فارغاً",
|
|
48
|
+
"err.access_id_missing": "قُرئ سر Access لكن لا يوجد معرّف يقابله",
|
|
49
|
+
"hint.access_id_missing": "مرّر --access-client-id أو عيّن {id}",
|
|
50
|
+
"err.access_secret_missing": "--access-client-id يتطلب سرّه",
|
|
51
|
+
"hint.access_secret_missing": "مرّره إلى --access-client-secret-stdin، أو عيّن {secret}. لا يكون وسيطاً في سطر الأوامر أبداً",
|
|
52
|
+
"err.machine_key_no_tokens": "مفتاح الآلة ليس له رموز مفوَّضة لعرضها أو إلغائها",
|
|
53
|
+
"hint.machine_key_no_tokens": "ألغِ مفتاح الآلة من صفحة المفاتيح في البوابة؛ `lighthouse tokens` مخصص للرموز المفوَّضة التي يسجّل بها الأشخاص دخولهم",
|
|
54
|
+
"err.not_revoked": "لم يُلغَ",
|
|
55
|
+
"err.no_tokens_to_list": "ليس لبيانات الاعتماد هذه رموز مفوَّضة لعرضها",
|
|
56
|
+
"err.unsupported_language": "{lang} ليست لغة مدعومة",
|
|
57
|
+
"hint.unsupported_language": "استخدم إحدى: {tags}",
|
|
58
|
+
"err.language_both": "حدّد لغة أو --clear، وليس كليهما",
|
|
59
|
+
"login.pairing_code": "رمز الإقران الخاص بك: {code}",
|
|
60
|
+
"login.approve_at": "وافق عليه في {url}",
|
|
61
|
+
"login.asking_for": "طلب: {scope}",
|
|
62
|
+
"login.signed_in": "تم تسجيل الدخول إلى {tenant} بصفة {email} ({role}).",
|
|
63
|
+
"login.scopes": "النطاقات: {scopes}",
|
|
64
|
+
"login.no_scopes": "(لا شيء)",
|
|
65
|
+
"login.in_keychain": "الرمز محفوظ في سلسلة مفاتيح نظام التشغيل لديك، وليس في أي ملف",
|
|
66
|
+
"login.access_kept": "ورمز خدمة Cloudflare Access محفوظ هناك معه",
|
|
67
|
+
"logout.nothing_stored": "{host}: لا شيء مخزّن",
|
|
68
|
+
"logout.revoked": "{host}: أُلغي ونُسي",
|
|
69
|
+
"logout.forgotten": "{host}: نُسي هنا؛ وتنتهي صلاحيته في الخدمة من تلقاء نفسها",
|
|
70
|
+
"logout.could_not_revoke": "{host}: تعذّر الإلغاء في الخدمة ({error})؛ سيُنسى هنا على أي حال",
|
|
71
|
+
"tokens.revoked": "أُلغي {token}",
|
|
72
|
+
"whoami.all_reach": "(كل ما يصل إليه هذا الدور)",
|
|
73
|
+
"whoami.machine_key": "مفتاح آلة",
|
|
74
|
+
"whoami.delegated_token": "رمز مفوَّض",
|
|
75
|
+
"whoami.never_by_time": "لا ينتهي بالوقت أبداً",
|
|
76
|
+
"whoami.note_machine_key": "مفتاح الآلة لا يُجدَّد أبداً ولا تنتهي صلاحيته بالوقت؛ ألغِه من صفحة المفاتيح في البوابة",
|
|
77
|
+
"whoami.note_delegated_token": "الرمز المفوَّض تنتهي صلاحيته بعد ثماني ساعات ولا يُجدَّد مع LIGHTHOUSE_TOKEN؛ للتكامل المستمر (CI) استخدم مفتاح آلة (aalcp-...) من صفحة المفاتيح في البوابة",
|
|
78
|
+
"help.host": "اسم مضيف المؤسسة أو معرّفها",
|
|
79
|
+
"help.as_json": "مستند JSON واحد على الإخراج القياسي، ولا شيء غيره",
|
|
80
|
+
"help.quiet": "بلا نص",
|
|
81
|
+
"help.no_input": "لا تسأل أي شخص أي شيء؛ اخرج بالرمز 7 بدلاً من ذلك",
|
|
82
|
+
"help.yes": "أجب بنعم على كل تأكيد",
|
|
83
|
+
"help.timeout": "ثوانٍ لطلب واحد",
|
|
84
|
+
"help.lang": "اللغة المستخدمة: en أو fr أو de أو es أو it أو pt أو nl, ga, ja, zh-Hans, zh-Hant, ar (الافتراضي: إعدادك، ثم LANG)",
|
|
85
|
+
"help.login._help": "سجّل الدخول عبر المتصفح برمز جهاز",
|
|
86
|
+
"help.logout._help": "ألغِ رمز هذا الجهاز وانسَه",
|
|
87
|
+
"help.tokens._help": "رموزك المفوَّضة، وإلغاء أحدها",
|
|
88
|
+
"help.whoami._help": "من سُجّل دخوله في واجهة سطر الأوامر هذه، وبأي صلاحيات",
|
|
89
|
+
"help.connect._help": "افتح موافقة المزوّد نفسه لهذه المؤسسة",
|
|
90
|
+
"help.connections._help": "جداول مزامنة اتصالاتك، وضبط أحدها، أو المزامنة الآن",
|
|
91
|
+
"help.collectors._help": "اطلب من Atlantic مُجمِّعاً، وتابع طلباتك",
|
|
92
|
+
"help.models._help": "مكتبة النماذج ودرجات أدلتها",
|
|
93
|
+
"help.kb._help": "قواعد المعرفة وحداثتها والاستيعاب فيها",
|
|
94
|
+
"help.agents._help": "اعرض الوكلاء وافحصهم وأنشئ هياكلهم وانشرهم وتراجع عنهم",
|
|
95
|
+
"help.builds._help": "الوكلاء المبنيون بمنشئ الوكلاء، ومكان كل منهم",
|
|
96
|
+
"help.evals._help": "نتائج التقييم، وتشغيل مجموعة",
|
|
97
|
+
"help.runs._help": "ما يعمل الآن، وما عمل",
|
|
98
|
+
"help.spend._help": "ما أُنفق، وإلى أين يتجه، وما وُفّر",
|
|
99
|
+
"help.limits._help": "حدود الإنفاق السارية، وهل طبّقتها المحركات",
|
|
100
|
+
"help.terms._help": "الشروط التجارية السارية لهذه المؤسسة",
|
|
101
|
+
"help.stack._help": "احصل على حزمتي: الملفات التي تشغّل LightHouse حيث اخترت",
|
|
102
|
+
"help.language._help": "لغتك، واللغات المتاحة",
|
|
103
|
+
"help.login.scope": "النطاقات المطلوبة، مفصولة بمسافة (الافتراضي: telemetry:read agents:read)",
|
|
104
|
+
"help.login.no_browser": "اطبع الرابط بدلاً من فتح متصفح",
|
|
105
|
+
"help.login.name": "كيف يُوصَف تسجيل الدخول هذا في البوابة وسجل التدقيق",
|
|
106
|
+
"help.login.access_client_id": "معرّف رمز خدمة Cloudflare Access الخاص بالمؤسسة، ليُحفظ مع تسجيل الدخول (السر: --access-client-secret-stdin)",
|
|
107
|
+
"help.login.access_secret_stdin": "اقرأ سر رمز خدمة Access من سطر واحد من الإدخال القياسي",
|
|
108
|
+
"help.logout.every": "انسَ كل مضيف، لا المضيف الحالي فقط",
|
|
109
|
+
"help.tokens.revoke": "ألغِ أحد رموزك بمعرّفه",
|
|
110
|
+
"help.whoami.profiles": "اعرض أيضاً كل مضيف سُجّل الدخول إليه على هذا الجهاز",
|
|
111
|
+
"help.connect.provider": "المزوّد المراد الاتصال به؛ `list` (أو لا شيء) لعرضهم",
|
|
112
|
+
"help.connect.family": "مع list: عائلة واحدة (google، microsoft، oracle، crm، ...)",
|
|
113
|
+
"help.connect.kind": "مع list: ما يحتويه (crm، mail، service-desk، ...)",
|
|
114
|
+
"help.connect.search": "مع list: كلمات للبحث عنها في الاسم أو العائلة أو النوع أو الوصف (\"email\" تجد Mail، و\"tickets\" تجد Service desk)",
|
|
115
|
+
"help.connect.state": "مع list: الموصّلات في هذه الحالة فقط",
|
|
116
|
+
"help.connect.no_browser": "اطبع رابط الموافقة بدلاً من فتحه",
|
|
117
|
+
"help.connect.reuse_local": "اعرض إعادة استخدام تسجيل دخول موجود على هذا الجهاز (يسأل أولاً)",
|
|
118
|
+
"help.connect.every": "بلا مزوّد: اعرض القادمة أيضاً",
|
|
119
|
+
"help.connect.credential_stdin": "اربط رمزاً موجوداً، يُقرأ من الإدخال القياسي، بصفتك (يتطلب `cloudflared access login https://<host>`)",
|
|
120
|
+
"help.connect.access": "مع --credential-stdin: read (الافتراضي) أو read_write",
|
|
121
|
+
"help.connect.target": "مع --credential-stdin: ما يشير إليه الاتصال (organisation=..., instance_url=..., site=...)؛ قابل للتكرار",
|
|
122
|
+
"help.connect.deployment": "مع --credential-stdin: عملية النشر التي تحتفظ ببيانات الاعتماد، حيث يكون للمؤسسة أكثر من واحدة",
|
|
123
|
+
"help.connect.deployment_key": "مع --credential-stdin: ثبّت المفتاح العام لعملية النشر (base64 أو PEM، كما طبعته بنيتك التحتية)؛ يُختم الرمز فقط لمفتاح ختم وقّعه ذلك المفتاح (أو LIGHTHOUSE_DEPLOYMENT_KEY)",
|
|
124
|
+
"help.connections.list._help": "كل اتصال وجدول مزامنته والمزامنة التالية (الافتراضي)",
|
|
125
|
+
"help.connections.schedule._help": "اضبط وتيرة مزامنة اتصال (client_admin، بصفتك)",
|
|
126
|
+
"help.connections.sync._help": "زامن اتصالاً الآن (client_admin، بصفتك)",
|
|
127
|
+
"help.connections.schedule.connection": "معرّف الاتصال، cx-...",
|
|
128
|
+
"help.connections.schedule.mode": "off أو every_15m أو hourly أو working_hours أو daily",
|
|
129
|
+
"help.connections.schedule.at": "مع --mode daily: الوقت بصيغة 24 ساعة HH:MM",
|
|
130
|
+
"help.connections.schedule.tz": "مع working_hours أو daily: المنطقة الزمنية، مثل Europe/London",
|
|
131
|
+
"help.connections.schedule.card": "المصدر، <pack>:<card>، حيث تبلغ عملية النشر عن أكثر من واحد",
|
|
132
|
+
"help.connections.schedule.deployment": "عملية النشر، حيث يعمل المصدر في أكثر من واحدة",
|
|
133
|
+
"help.connections.schedule.reason": "السبب، لسجل التدقيق",
|
|
134
|
+
"help.connections.sync.connection": "معرّف الاتصال، cx-...",
|
|
135
|
+
"help.connections.sync.card": "المصدر، <pack>:<card>، حيث تبلغ عملية النشر عن أكثر من واحد",
|
|
136
|
+
"help.connections.sync.deployment": "عملية النشر، حيث يعمل المصدر في أكثر من واحدة",
|
|
137
|
+
"help.connections.sync.reason": "السبب، لسجل التدقيق",
|
|
138
|
+
"help.collectors.requests._help": "طلبات المُجمِّعات الخاصة بمؤسستك ومرحلة كل منها (الافتراضي)",
|
|
139
|
+
"help.collectors.request._help": "اطلب من Atlantic مُجمِّعاً (handler أو client_admin)",
|
|
140
|
+
"help.collectors.request.vendor": "من يصنع النظام، مثل 'Invented CRM'",
|
|
141
|
+
"help.collectors.request.product": "المنتج، مثل 'Sales Suite'",
|
|
142
|
+
"help.collectors.request.reads": "ما ينبغي أن يقرأه",
|
|
143
|
+
"help.collectors.request.cloud": "أين تعمل عملية النشر لديك",
|
|
144
|
+
"help.collectors.request.kind": "ما يقرأه، كمعرّف نصي (slug): crm، tickets، wiki، ...",
|
|
145
|
+
"help.collectors.request.access": "read (الافتراضي) أو read_write",
|
|
146
|
+
"help.collectors.request.urgency": "low أو normal (الافتراضي) أو high",
|
|
147
|
+
"help.collectors.request.docs_url": "وثائق API العامة للمورّد، https://",
|
|
148
|
+
"help.models.task": "مقبول للتوافق؛ لا ترتّب الخدمة المكتبة حسب المهمة، لذا لا يغيّر شيئاً",
|
|
149
|
+
"help.models.provider": "نماذج هذا المزوّد فقط",
|
|
150
|
+
"help.kb.list._help": "كل قاعدة معرفة (الافتراضي)",
|
|
151
|
+
"help.kb.show._help": "قاعدة معرفة واحدة",
|
|
152
|
+
"help.kb.ingest._help": "زامن اتصالاً في قاعدة معرفة الآن (بصفتك)",
|
|
153
|
+
"help.kb.upload._help": "ارفع ملفاً مباشرة إلى المخزن الخاص بعملية النشر لديك",
|
|
154
|
+
"help.kb.show.index": "اسم الفهرس",
|
|
155
|
+
"help.kb.ingest.source": "معرّف اتصال (cx-...) أو موصّل: github، gitlab، confluence، jira، gdrive…",
|
|
156
|
+
"help.kb.ingest.repo": "ضيّق موصّلاً إلى اتصال واحد بتسميته أو هدفه، مثل owner/name",
|
|
157
|
+
"help.kb.ingest.reason": "السبب، لسجل التدقيق",
|
|
158
|
+
"help.kb.ingest.wait": "انتظر حتى تنتهي المزامنة",
|
|
159
|
+
"help.kb.ingest.wait_timeout": "أقصى عدد من الثواني للانتظار (الافتراضي 1800)؛ ثم الخروج بالرمز 5",
|
|
160
|
+
"help.kb.upload.file": "الملف: .md، .txt، .csv، .pdf، .docx، .pptx، .xlsx…",
|
|
161
|
+
"help.kb.upload.deployment": "أي عملية نشر، حيث يكون لديك أكثر من واحدة",
|
|
162
|
+
"help.agents.list._help": "كل وكيل (الافتراضي)",
|
|
163
|
+
"help.agents.show._help": "إعدادات وكيل واحد وآخر تشغيلاته",
|
|
164
|
+
"help.agents.init._help": "أنشئ هيكل agent.toml في هذا الدليل",
|
|
165
|
+
"help.agents.logs._help": "تشغيلات وكيل، وخطوات تشغيل واحد",
|
|
166
|
+
"help.agents.deploy._help": "اجعل إصداراً منشوراً من وكيل هو الحالي (نطاق deploy)",
|
|
167
|
+
"help.agents.rollback._help": "ارجع إلى إصدار منشور سابق (نطاق deploy)",
|
|
168
|
+
"help.agents.show.agent": "pack:card، مثل research:summary",
|
|
169
|
+
"help.agents.init.name": "اسم الوكيل",
|
|
170
|
+
"help.agents.init.file": "مكان كتابته",
|
|
171
|
+
"help.agents.init.force": "استبدل ملفاً موجوداً",
|
|
172
|
+
"help.agents.logs.status": "التشغيلات بهذه الحالة فقط",
|
|
173
|
+
"help.agents.logs.trace": "امتدادات تشغيل واحد بدلاً من ذلك",
|
|
174
|
+
"help.agents.deploy.agent": "pack:card، مثل research:summary",
|
|
175
|
+
"help.agents.deploy.version": "الإصدار المنشور المراد جعله الحالي",
|
|
176
|
+
"help.agents.deploy.deployment": "عملية النشر، حيث يكون للمؤسسة أكثر من واحدة",
|
|
177
|
+
"help.agents.deploy.reason": "السبب، لسجل التدقيق",
|
|
178
|
+
"help.agents.deploy.wait": "انتظر حتى ترد عملية النشر (وإن كانت تنتظر الموافقة، فحتى صدور القرار)",
|
|
179
|
+
"help.agents.deploy.wait_timeout": "أقصى عدد من الثواني للانتظار (الافتراضي 900)؛ ثم الخروج بالرمز 5",
|
|
180
|
+
"help.agents.rollback.agent": "pack:card",
|
|
181
|
+
"help.agents.rollback.to": "الإصدار المراد الرجوع إليه (الافتراضي: آخر إصدار اجتاز بوابته قبل الحالي)",
|
|
182
|
+
"help.agents.rollback.deployment": "عملية النشر، حيث يكون للمؤسسة أكثر من واحدة",
|
|
183
|
+
"help.agents.rollback.reason": "السبب، لسجل التدقيق",
|
|
184
|
+
"help.agents.rollback.wait": "انتظر حتى ترد عملية النشر (وإن كانت تنتظر الموافقة، فحتى صدور القرار)",
|
|
185
|
+
"help.agents.rollback.wait_timeout": "أقصى عدد من الثواني للانتظار (الافتراضي 900)؛ ثم الخروج بالرمز 5",
|
|
186
|
+
"help.builds.status": "المقترحات في هذه الخطوة فقط، مثل publish_requested",
|
|
187
|
+
"help.builds.show._help": "مقترح واحد، مع درجاته وتكلفته التقديرية",
|
|
188
|
+
"help.builds.show.proposal": "معرّف المقترح (32 حرفاً سداسياً عشرياً)",
|
|
189
|
+
"help.evals.list._help": "أحدث النتائج (الافتراضي)",
|
|
190
|
+
"help.evals.run._help": "شغّل تقييم وكيل مرة واحدة، ضمن حدّ إنفاق",
|
|
191
|
+
"help.evals.list.fail_below": "اخرج بالرمز 1 إذا كان مقياس أي صف أدنى من هذا، أو لا يملك هذا المقياس",
|
|
192
|
+
"help.evals.list.metric": "المقياس الذي يقرؤه --fail-below من `metrics` لكل صف (الافتراضي: f1)",
|
|
193
|
+
"help.evals.run.agent": "pack:card، مثل research:summary",
|
|
194
|
+
"help.evals.run.cap": "أقصى ما يجوز لهذا التشغيل إنفاقه، بالدولار الأمريكي",
|
|
195
|
+
"help.evals.run.eval_set": "مجموعة تقييم واحدة (معرّف بطاقة التقييم الخاصة بها)",
|
|
196
|
+
"help.evals.run.deployment": "عملية النشر، حيث يكون للمؤسسة أكثر من واحدة",
|
|
197
|
+
"help.evals.run.reason": "السبب، لسجل التدقيق",
|
|
198
|
+
"help.evals.run.wait": "انتظر نتائج التقييم، واجعلها بوابة",
|
|
199
|
+
"help.evals.run.wait_timeout": "أقصى عدد من الثواني للانتظار (الافتراضي 1800)؛ ثم الخروج بالرمز 5",
|
|
200
|
+
"help.evals.run.fail_below": "مع --wait: اخرج بالرمز 1 إذا كان مقياس صف جديد أدنى من هذا، أو مفقوداً",
|
|
201
|
+
"help.evals.run.metric": "المقياس الذي يقرؤه --fail-below (الافتراضي: f1)",
|
|
202
|
+
"help.runs.list._help": "آخر التشغيلات (الافتراضي)",
|
|
203
|
+
"help.runs.show._help": "تشغيل واحد",
|
|
204
|
+
"help.runs.tail._help": "تابع التشغيلات الحية",
|
|
205
|
+
"help.runs.show.run": "قيمة run_id_hash الخاصة به",
|
|
206
|
+
"help.runs.show.as_map": "خريطة التشغيل: كل خطوة واستدعاء نموذج واسترجاع",
|
|
207
|
+
"help.runs.tail.interval": "ثوانٍ بين كل استطلاع",
|
|
208
|
+
"help.runs.tail.once": "لقطة واحدة، ثم توقف",
|
|
209
|
+
"help.runs.tail.duration": "توقف بعد هذا العدد من الثواني",
|
|
210
|
+
"help.runs.tail.deployment": "تشغيلات عملية النشر هذه فقط",
|
|
211
|
+
"help.runs.tail.fail_on_stall": "اخرج بالرمز 1 إذا تعثّر تشغيل",
|
|
212
|
+
"help.spend.by": "كيفية التجميع",
|
|
213
|
+
"help.spend.month": "YYYY-MM؛ الشهر الحالي افتراضياً",
|
|
214
|
+
"help.spend.forecast": "وإسقاط نهاية الشهر مقابل الحدّ الأقصى أيضاً",
|
|
215
|
+
"help.spend.savings": "ورقم الوفورات التقديري الرئيسي أيضاً",
|
|
216
|
+
"help.limits.scope": "حدود هذا النوع من النطاق فقط",
|
|
217
|
+
"help.terms.term": "شرط واحد بمفتاحه",
|
|
218
|
+
"help.stack.cloud": "aws أو azure أو gcp أو onprem (الافتراضي: المختارة)",
|
|
219
|
+
"help.stack.region": "المنطقة (الافتراضي: المختارة)",
|
|
220
|
+
"help.stack.profile": "always_on أو ephemeral (الافتراضي: المختار)",
|
|
221
|
+
"help.stack.deployment": "أي عمليات النشر النشطة لديك تخصها الملفات",
|
|
222
|
+
"help.stack.out": "اكتب كل ملف في هذا الدليل",
|
|
223
|
+
"help.stack.force": "استبدل الملفات التي تسمّيها الحزمة وتكون موجودة هناك",
|
|
224
|
+
"help.language.list_all": "اعرض اللغات المتاحة فقط",
|
|
225
|
+
"label.agent": "الوكيل",
|
|
226
|
+
"label.pack": "الحزمة",
|
|
227
|
+
"label.state": "الحالة",
|
|
228
|
+
"label.models": "النماذج",
|
|
229
|
+
"label.runs_month": "التشغيلات (الشهر)",
|
|
230
|
+
"label.estimated_cost": "التكلفة التقديرية",
|
|
231
|
+
"label.version": "الإصدار",
|
|
232
|
+
"label.status": "الحالة",
|
|
233
|
+
"label.command": "الأمر",
|
|
234
|
+
"label.span": "الامتداد",
|
|
235
|
+
"label.kind": "النوع",
|
|
236
|
+
"label.starts_at_ms": "يبدأ عند (مللي ثانية)",
|
|
237
|
+
"label.took_ms": "استغرق (مللي ثانية)",
|
|
238
|
+
"label.run": "التشغيل",
|
|
239
|
+
"label.started": "بدأ",
|
|
240
|
+
"label.attempts": "المحاولات",
|
|
241
|
+
"label.trigger": "المشغّل",
|
|
242
|
+
"label.proposal": "المقترح",
|
|
243
|
+
"label.evaluation": "التقييم",
|
|
244
|
+
"label.estimated_month": "تقديري / شهر",
|
|
245
|
+
"label.deployment": "النشر",
|
|
246
|
+
"label.template": "القالب",
|
|
247
|
+
"label.problems": "المشكلات",
|
|
248
|
+
"label.retrieval": "الاسترجاع",
|
|
249
|
+
"label.estimated_per_run": "تقديري لكل تشغيل",
|
|
250
|
+
"label.estimated_per_month": "تقديري لكل شهر",
|
|
251
|
+
"label.request": "الطلب",
|
|
252
|
+
"label.collector": "المُجمِّع",
|
|
253
|
+
"label.stage": "المرحلة",
|
|
254
|
+
"label.issue": "المسألة",
|
|
255
|
+
"label.clients_asking": "العملاء الطالبون",
|
|
256
|
+
"label.asked": "طُلب",
|
|
257
|
+
"label.provider": "المزوّد",
|
|
258
|
+
"label.what": "ماذا",
|
|
259
|
+
"label.family": "العائلة",
|
|
260
|
+
"label.read_only_scopes": "نطاقات القراءة فقط",
|
|
261
|
+
"label.approve_at": "الموافقة في",
|
|
262
|
+
"label.sent_to_your_own_store": "أُرسل إلى مخزنك",
|
|
263
|
+
"label.access": "الوصول",
|
|
264
|
+
"label.connection": "الاتصال",
|
|
265
|
+
"label.connected": "متصل",
|
|
266
|
+
"label.syncing": "يزامن",
|
|
267
|
+
"label.last_sync": "آخر مزامنة",
|
|
268
|
+
"label.connector": "الموصّل",
|
|
269
|
+
"label.schedule": "الجدول",
|
|
270
|
+
"label.next_sync": "المزامنة التالية",
|
|
271
|
+
"label.asked_for": "المطلوب",
|
|
272
|
+
"label.suite": "المجموعة",
|
|
273
|
+
"label.passed": "اجتاز",
|
|
274
|
+
"label.metrics": "المقاييس",
|
|
275
|
+
"label.measured": "قيس",
|
|
276
|
+
"label.cap": "الحدّ الأقصى",
|
|
277
|
+
"label.index": "الفهرس",
|
|
278
|
+
"label.documents": "المستندات",
|
|
279
|
+
"label.chunks": "المقاطع",
|
|
280
|
+
"label.last_refreshed": "آخر تحديث",
|
|
281
|
+
"label.health": "الصحة",
|
|
282
|
+
"label.backend": "الواجهة الخلفية",
|
|
283
|
+
"label.knowledge_base": "قاعدة المعرفة",
|
|
284
|
+
"label.uploaded": "رُفع",
|
|
285
|
+
"label.bytes": "بايتات",
|
|
286
|
+
"label.indexed": "فُهرس",
|
|
287
|
+
"label.tag": "الوسم",
|
|
288
|
+
"label.language": "اللغة",
|
|
289
|
+
"label.your_language": "لغتك",
|
|
290
|
+
"label.your_organisation_s": "لغة مؤسستك",
|
|
291
|
+
"label.in_use_now": "قيد الاستخدام",
|
|
292
|
+
"label.scope": "النطاق",
|
|
293
|
+
"label.period": "الفترة",
|
|
294
|
+
"label.spent": "المنفَق",
|
|
295
|
+
"label.used": "المستخدم %",
|
|
296
|
+
"label.alerts_at": "التنبيه عند %",
|
|
297
|
+
"label.applied_by": "طُبّق بواسطة",
|
|
298
|
+
"label.token": "الرمز",
|
|
299
|
+
"label.client": "العميل",
|
|
300
|
+
"label.scopes": "النطاقات",
|
|
301
|
+
"label.issued": "صدر",
|
|
302
|
+
"label.expires": "ينتهي",
|
|
303
|
+
"label.last_used": "آخر استخدام",
|
|
304
|
+
"label.step": "الخطوة",
|
|
305
|
+
"label.tokens_in_out": "الرموز داخل/خارج",
|
|
306
|
+
"label.elapsed": "المنقضي",
|
|
307
|
+
"label.calls": "الاستدعاءات",
|
|
308
|
+
"label.input_tokens": "رموز الإدخال",
|
|
309
|
+
"label.output_tokens": "رموز الإخراج",
|
|
310
|
+
"label.cost_usd": "التكلفة (USD)",
|
|
311
|
+
"label.managed_charge": "الرسوم المُدارة",
|
|
312
|
+
"label.month": "الشهر",
|
|
313
|
+
"label.total_cost_usd": "إجمالي التكلفة (USD)",
|
|
314
|
+
"label.shown_in": "معروض بـ",
|
|
315
|
+
"label.projected_month_end_estimated": "المتوقع لنهاية الشهر (تقديري)",
|
|
316
|
+
"label.likely_range_estimated": "النطاق المرجّح (تقديري)",
|
|
317
|
+
"label.against_the_cap": "مقابل الحدّ الأقصى",
|
|
318
|
+
"label.estimated_saving_this_month": "الوفر التقديري هذا الشهر",
|
|
319
|
+
"label.in_words": "بالكلمات",
|
|
320
|
+
"label.where": "أين",
|
|
321
|
+
"label.profile": "الملف",
|
|
322
|
+
"label.infrastructure": "البنية التحتية",
|
|
323
|
+
"label.written_to": "كُتب في",
|
|
324
|
+
"label.file": "الملف",
|
|
325
|
+
"label.written": "كُتب",
|
|
326
|
+
"label.term": "الشرط",
|
|
327
|
+
"label.meaning": "المعنى",
|
|
328
|
+
"label.set_by": "حدّده",
|
|
329
|
+
"label.direction": "الاتجاه",
|
|
330
|
+
"label.in_force_from": "ساري من",
|
|
331
|
+
"label.tenant": "المؤسسة",
|
|
332
|
+
"label.host": "المضيف",
|
|
333
|
+
"label.person": "الشخص",
|
|
334
|
+
"label.role": "الدور",
|
|
335
|
+
"label.signed_in_with": "سُجّل الدخول بـ",
|
|
336
|
+
"label.credential_from": "مصدر بيانات الاعتماد",
|
|
337
|
+
"label.credential_kind": "نوع بيانات الاعتماد",
|
|
338
|
+
"label.model": "النموذج",
|
|
339
|
+
"label.evals": "التقييمات",
|
|
340
|
+
"label.calls_month": "الاستدعاءات (الشهر)",
|
|
341
|
+
"label.input_m": "الإدخال /M",
|
|
342
|
+
"label.output_m": "الإخراج /M"
|
|
343
|
+
}
|