@kernhq/module-inventory 0.2.0 → 0.4.0
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/README.md +106 -25
- package/dist/contract/capabilities.d.ts +4 -4
- package/dist/contract/capabilities.d.ts.map +1 -1
- package/dist/contract/capabilities.js +51 -9
- package/dist/contract/capabilities.js.map +1 -1
- package/dist/contract/events.d.ts +43 -0
- package/dist/contract/events.d.ts.map +1 -1
- package/dist/contract/events.js +40 -0
- package/dist/contract/events.js.map +1 -1
- package/dist/contract/index.d.ts +1 -0
- package/dist/contract/index.d.ts.map +1 -1
- package/dist/contract/index.js +1 -0
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/models.d.ts +345 -0
- package/dist/contract/models.d.ts.map +1 -1
- package/dist/contract/models.js +245 -0
- package/dist/contract/models.js.map +1 -1
- package/dist/contract/notifications.d.ts +24 -0
- package/dist/contract/notifications.d.ts.map +1 -0
- package/dist/contract/notifications.js +72 -0
- package/dist/contract/notifications.js.map +1 -0
- package/dist/contract/permissions.d.ts +52 -2
- package/dist/contract/permissions.d.ts.map +1 -1
- package/dist/contract/permissions.js +55 -2
- package/dist/contract/permissions.js.map +1 -1
- package/dist/contract/router.d.ts +1108 -0
- package/dist/contract/router.d.ts.map +1 -1
- package/dist/contract/router.js +253 -1
- package/dist/contract/router.js.map +1 -1
- package/dist/contract/settings.d.ts +2 -0
- package/dist/contract/settings.d.ts.map +1 -1
- package/dist/contract/settings.js +24 -4
- package/dist/contract/settings.js.map +1 -1
- package/dist/server/index.d.ts +8 -4
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +289 -5
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs.d.ts +48 -0
- package/dist/server/jobs.d.ts.map +1 -0
- package/dist/server/jobs.js +358 -0
- package/dist/server/jobs.js.map +1 -0
- package/dist/server/router.d.ts +1392 -0
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/router.js +385 -7
- package/dist/server/router.js.map +1 -1
- package/dist/server/schema.d.ts +134 -1
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/schema.js +169 -4
- package/dist/server/schema.js.map +1 -1
- package/dist/server/services/assets.d.ts +69 -3
- package/dist/server/services/assets.d.ts.map +1 -1
- package/dist/server/services/assets.js +199 -31
- package/dist/server/services/assets.js.map +1 -1
- package/dist/server/services/attachments.d.ts +80 -0
- package/dist/server/services/attachments.d.ts.map +1 -0
- package/dist/server/services/attachments.js +182 -0
- package/dist/server/services/attachments.js.map +1 -0
- package/dist/server/services/audience.d.ts +15 -0
- package/dist/server/services/audience.d.ts.map +1 -0
- package/dist/server/services/audience.js +64 -0
- package/dist/server/services/audience.js.map +1 -0
- package/dist/server/services/categories.d.ts +157 -0
- package/dist/server/services/categories.d.ts.map +1 -0
- package/dist/server/services/categories.js +309 -0
- package/dist/server/services/categories.js.map +1 -0
- package/dist/server/services/cursor.d.ts +68 -0
- package/dist/server/services/cursor.d.ts.map +1 -0
- package/dist/server/services/cursor.js +39 -0
- package/dist/server/services/cursor.js.map +1 -0
- package/dist/server/services/custody.d.ts +175 -0
- package/dist/server/services/custody.d.ts.map +1 -0
- package/dist/server/services/custody.js +367 -0
- package/dist/server/services/custody.js.map +1 -0
- package/dist/server/services/db-errors.d.ts +7 -0
- package/dist/server/services/db-errors.d.ts.map +1 -0
- package/dist/server/services/db-errors.js +32 -0
- package/dist/server/services/db-errors.js.map +1 -0
- package/dist/server/services/index.d.ts +16 -0
- package/dist/server/services/index.d.ts.map +1 -1
- package/dist/server/services/index.js +25 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/members.d.ts +27 -0
- package/dist/server/services/members.d.ts.map +1 -0
- package/dist/server/services/members.js +39 -0
- package/dist/server/services/members.js.map +1 -0
- package/dist/server/services/notify.d.ts +43 -1
- package/dist/server/services/notify.d.ts.map +1 -1
- package/dist/server/services/notify.js +47 -5
- package/dist/server/services/notify.js.map +1 -1
- package/dist/server/services/offboarding.d.ts +70 -0
- package/dist/server/services/offboarding.d.ts.map +1 -0
- package/dist/server/services/offboarding.js +116 -0
- package/dist/server/services/offboarding.js.map +1 -0
- package/dist/server/services/repairs.d.ts +204 -0
- package/dist/server/services/repairs.d.ts.map +1 -0
- package/dist/server/services/repairs.js +476 -0
- package/dist/server/services/repairs.js.map +1 -0
- package/dist/server/services/search.d.ts +85 -0
- package/dist/server/services/search.d.ts.map +1 -0
- package/dist/server/services/search.js +142 -0
- package/dist/server/services/search.js.map +1 -0
- package/dist/server/services/stats.d.ts +42 -0
- package/dist/server/services/stats.d.ts.map +1 -0
- package/dist/server/services/stats.js +80 -0
- package/dist/server/services/stats.js.map +1 -0
- package/dist/server/services/status.d.ts +102 -0
- package/dist/server/services/status.d.ts.map +1 -0
- package/dist/server/services/status.js +71 -0
- package/dist/server/services/status.js.map +1 -0
- package/migrations/0002_custody_and_categories.sql +23 -0
- package/migrations/0003_repairs.sql +23 -0
- package/migrations/0004_platform_surfaces.sql +51 -0
- package/migrations/0005_repair_dates.sql +35 -0
- package/migrations/0006_workspace_registry_read.sql +50 -0
- package/migrations/0007_history_sequence.sql +83 -0
- package/migrations/0008_category_order_unique.sql +71 -0
- package/migrations/meta/0002_snapshot.json +1054 -0
- package/migrations/meta/0003_snapshot.json +1070 -0
- package/migrations/meta/0004_snapshot.json +1130 -0
- package/migrations/meta/0005_snapshot.json +1135 -0
- package/migrations/meta/_journal.json +49 -0
- package/package.json +2 -1
- package/src/client/api-instance.ts +27 -2
- package/src/client/bidi.test.ts +148 -0
- package/src/client/bidi.ts +85 -0
- package/src/client/components/AssetDetailPanel.svelte +614 -0
- package/src/client/components/AssetFormDialog.svelte +71 -22
- package/src/client/components/AssetPhoto.svelte +178 -0
- package/src/client/components/AttachmentsSection.svelte +327 -0
- package/src/client/components/CustodyDialog.svelte +201 -0
- package/src/client/components/RepairDialog.svelte +271 -0
- package/src/client/components/RepairsSection.svelte +318 -0
- package/src/client/components/Timeline.svelte +347 -0
- package/src/client/components/TimelineText.svelte +124 -0
- package/src/client/core-api.ts +71 -0
- package/src/client/custody.test.ts +31 -0
- package/src/client/custody.ts +34 -0
- package/src/client/errors.test.ts +395 -0
- package/src/client/errors.ts +229 -0
- package/src/client/links.test.ts +74 -0
- package/src/client/links.ts +44 -0
- package/src/client/members.test.ts +132 -0
- package/src/client/members.ts +116 -0
- package/src/client/messages.test.ts +127 -0
- package/src/client/messages.ts +1106 -18
- package/src/client/mock.test.ts +465 -1
- package/src/client/mock.ts +1105 -79
- package/src/client/module.ts +73 -1
- package/src/client/pages/AssetsPage.svelte +317 -45
- package/src/client/permissions.ts +7 -0
- package/src/client/price.test.ts +151 -3
- package/src/client/price.ts +155 -11
- package/src/client/query.ts +36 -0
- package/src/client/reorder.test.ts +100 -0
- package/src/client/reorder.ts +79 -0
- package/src/client/repairs.test.ts +38 -0
- package/src/client/repairs.ts +38 -0
- package/src/client/sequence.test.ts +248 -0
- package/src/client/sequence.ts +185 -0
- package/src/client/settings/CategoriesSettings.svelte +746 -0
- package/src/client/settings/GeneralSettings.svelte +0 -0
- package/src/client/status.ts +29 -0
- package/src/client/timeline.test.ts +175 -0
- package/src/client/timeline.ts +206 -0
- package/src/client/widgets/OverviewWidget.svelte +127 -26
- package/src/client/widgets/RepairsWidget.svelte +124 -0
- package/src/contract/capabilities.ts +53 -9
- package/src/contract/events.ts +49 -0
- package/src/contract/index.ts +1 -0
- package/src/contract/models.ts +270 -0
- package/src/contract/notifications.ts +73 -0
- package/src/contract/permissions.ts +55 -2
- package/src/contract/router.ts +284 -1
- package/src/contract/settings.ts +24 -4
- package/src/module.test.ts +217 -4
- package/src/server/index.ts +311 -4
- package/src/server/inventory.int.test.ts +4109 -19
- package/src/server/jobs.ts +444 -0
- package/src/server/migrations.test.ts +253 -2
- package/src/server/router.ts +486 -6
- package/src/server/schema.ts +171 -3
- package/src/server/services/assets.ts +214 -54
- package/src/server/services/attachments.ts +215 -0
- package/src/server/services/audience.ts +77 -0
- package/src/server/services/categories.ts +337 -0
- package/src/server/services/cursor.ts +104 -0
- package/src/server/services/custody.ts +471 -0
- package/src/server/services/db-errors.ts +42 -0
- package/src/server/services/index.ts +34 -1
- package/src/server/services/members.ts +54 -0
- package/src/server/services/notify.ts +52 -7
- package/src/server/services/offboarding.ts +150 -0
- package/src/server/services/repairs.ts +567 -0
- package/src/server/services/search.ts +166 -0
- package/src/server/services/stats.ts +88 -0
- package/src/server/services/status.test.ts +34 -0
- package/src/server/services/status.ts +143 -0
- package/src/client/settings/core-api.ts +0 -32
package/src/client/messages.ts
CHANGED
|
@@ -82,13 +82,287 @@ export const en: Record<string, Message> = {
|
|
|
82
82
|
// "Example", not "Next tag": the counter is a row in the module's own table rather than a
|
|
83
83
|
// setting, so this page cannot know what the next tag will be and must not imply that it does.
|
|
84
84
|
'inventory.settings_preview': 'Example tag',
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
// Not "Asset tag settings saved" any more: this page saves the notice windows too, and a toast
|
|
86
|
+
// naming half of what it just wrote is a toast that will be wrong again the next time.
|
|
87
|
+
'inventory.settings_saved': 'Settings saved',
|
|
88
|
+
// There is deliberately no `settings_save_error`. The save bar renders `errorMessage(err, t)`,
|
|
89
|
+
// which names the actual refusal — "You are not allowed to do that", "Your session has ended" —
|
|
90
|
+
// and a generic "could not be saved" above it would say strictly less while being one more
|
|
91
|
+
// string to keep true in five languages.
|
|
87
92
|
'inventory.settings_error': 'The settings could not be loaded',
|
|
88
93
|
'inventory.settings_readonly': 'You can read these settings but not change them.',
|
|
89
94
|
'inventory.settings_not_enabled': 'Inventory is not enabled in this workspace',
|
|
95
|
+
|
|
96
|
+
// ---- the two nightly sweeps, and the one filter they link to ------------------------------
|
|
97
|
+
'inventory.settings_notices': 'Notices',
|
|
98
|
+
'inventory.settings_notices_desc':
|
|
99
|
+
'When this workspace is told that a warranty is running out, or that an item has been at a repairer too long.',
|
|
100
|
+
'inventory.settings_warranty_days': 'Warn this many days ahead',
|
|
101
|
+
'inventory.settings_warranty_days_hint':
|
|
102
|
+
'How far ahead of a warranty expiring somebody is told. Once per item, to whoever is holding it.',
|
|
103
|
+
'inventory.settings_repair_days': 'Chase a repair after this many days',
|
|
104
|
+
'inventory.settings_repair_days_hint':
|
|
105
|
+
'How long an item may be away before the person who logged the repair is asked to chase it.',
|
|
106
|
+
'inventory.settings_days_invalid': 'Enter a whole number of days between 1 and 365',
|
|
107
|
+
'inventory.held_by': 'Held by {name}',
|
|
108
|
+
'inventory.held_by_clear': 'Show every asset',
|
|
90
109
|
'inventory.widget_title': 'Recent assets',
|
|
91
110
|
'inventory.widget_desc': 'The most recently added assets in this workspace.',
|
|
111
|
+
|
|
112
|
+
// ---- categories -------------------------------------------------------------------------
|
|
113
|
+
'inventory.category': 'Category',
|
|
114
|
+
'inventory.category_none': 'Uncategorised',
|
|
115
|
+
'inventory.filter_all_categories': 'All categories',
|
|
116
|
+
'inventory.categories_error': 'The categories could not be loaded',
|
|
117
|
+
'inventory.settings_categories': 'Categories',
|
|
118
|
+
'inventory.settings_categories_desc': 'How this workspace groups the things it owns.',
|
|
119
|
+
'inventory.categories_empty': 'No categories yet',
|
|
120
|
+
'inventory.categories_empty_desc':
|
|
121
|
+
'Group what the company owns — laptops, furniture, cameras — so a long list can be narrowed to one kind of thing.',
|
|
122
|
+
// Not the same sentence as having none: this workspace has categories and is looking at none of
|
|
123
|
+
// them. Saying "No categories yet" beside a New category button, to somebody who archived all
|
|
124
|
+
// five of theirs, both misreports the register and offers the wrong way out.
|
|
125
|
+
'inventory.categories_all_archived': 'Every category is archived',
|
|
126
|
+
'inventory.categories_all_archived_desc':
|
|
127
|
+
'Show the archived ones to bring one back, or add a new category.',
|
|
128
|
+
'inventory.category_new': 'New category',
|
|
129
|
+
'inventory.category_edit': 'Edit category',
|
|
130
|
+
'inventory.category_name_placeholder': 'Laptops, Furniture, Cameras…',
|
|
131
|
+
// This was a **Position** field: a number box, and a hint explaining that lower comes first and
|
|
132
|
+
// that two categories sharing a number fall back to their names. That is a database column with a
|
|
133
|
+
// form around it. Nobody arranges their filing by integer, and the form invited the one state it
|
|
134
|
+
// then had to explain. The order is dragged now, so the words are about the gesture — and about
|
|
135
|
+
// the buttons beside it, because a drag is unreachable by keyboard.
|
|
136
|
+
'inventory.category_reorder_hint':
|
|
137
|
+
'Drag a category, or use the arrows on its row, to change the order they appear in.',
|
|
138
|
+
'inventory.category_move_up': 'Move {name} up',
|
|
139
|
+
'inventory.category_move_down': 'Move {name} down',
|
|
140
|
+
// What a screen reader is told after a move — "after Cameras", never "position 3 of 9". A
|
|
141
|
+
// neighbour's name is the thing that says where something is; a number is two more facts to hold
|
|
142
|
+
// in your head to work out the same answer. Worded as where it *is* rather than what just
|
|
143
|
+
// happened, so pressing the button on a row that cannot move any further is still true.
|
|
144
|
+
'inventory.category_position_first': '{name} is first',
|
|
145
|
+
'inventory.category_position_last': '{name} is last',
|
|
146
|
+
'inventory.category_position_after': '{name} is after {other}',
|
|
147
|
+
'inventory.category_created_toast': '{name} added',
|
|
148
|
+
'inventory.category_updated_toast': '{name} saved',
|
|
149
|
+
'inventory.category_archived_toast': '{name} archived',
|
|
150
|
+
'inventory.category_restored_toast': '{name} restored',
|
|
151
|
+
'inventory.category_archive_title': 'Archive {name}?',
|
|
152
|
+
// Says what survives, not "Are you sure?" — the whole reason this archives rather than deletes.
|
|
153
|
+
'inventory.category_archive_body':
|
|
154
|
+
'It leaves the picker and the filter. Assets already filed under it keep it and go on saying what they are, and you can restore it at any time.',
|
|
155
|
+
|
|
156
|
+
// ---- custody ----------------------------------------------------------------------------
|
|
157
|
+
'inventory.custody': 'Custody',
|
|
158
|
+
'inventory.custody_holder': 'Held by',
|
|
159
|
+
'inventory.custody_nobody': 'Nobody — it is in stock',
|
|
160
|
+
'inventory.custody_since': 'Held since {date}',
|
|
161
|
+
'inventory.custody_assign': 'Hand over',
|
|
162
|
+
'inventory.custody_transfer': 'Hand on',
|
|
163
|
+
'inventory.custody_return': 'Take back',
|
|
164
|
+
'inventory.custody_assign_title': 'Hand over {name}',
|
|
165
|
+
'inventory.custody_transfer_title': 'Hand on {name}',
|
|
166
|
+
'inventory.custody_return_title': 'Take back {name}?',
|
|
167
|
+
'inventory.custody_return_body': 'It goes back into stock, and {person} stops being answerable for it.',
|
|
168
|
+
'inventory.custody_person': 'Who is taking it',
|
|
169
|
+
'inventory.custody_person_none': 'Choose someone',
|
|
170
|
+
'inventory.custody_note': 'Note',
|
|
171
|
+
'inventory.custody_note_hint': 'Optional — where it is going, or what it is for.',
|
|
172
|
+
'inventory.custody_assigned_toast': '{name} handed to {person}',
|
|
173
|
+
'inventory.custody_transferred_toast': '{name} handed on to {person}',
|
|
174
|
+
'inventory.custody_returned_toast': '{name} taken back',
|
|
175
|
+
'inventory.custody_previous': 'Previous holders',
|
|
176
|
+
'inventory.custody_empty': 'Nobody has held this yet',
|
|
177
|
+
'inventory.custody_empty_desc': 'Hand it to somebody and the handover is recorded here.',
|
|
178
|
+
'inventory.custody_error': 'The custody record could not be loaded',
|
|
179
|
+
'inventory.custody_archived_hint': 'Restore this item before handing it over.',
|
|
180
|
+
// Who a stored id turns out to be, when it is not somebody the workspace still has — and the two
|
|
181
|
+
// states that are not that at all. `member_former` is a claim: it says this person has left. It
|
|
182
|
+
// was shown for both of the others too, so every timeline read "A former member handed it to A
|
|
183
|
+
// former member" until the member list arrived, and for ever if it failed.
|
|
184
|
+
'inventory.member_former': 'A former member',
|
|
185
|
+
'inventory.member_system': 'The system',
|
|
186
|
+
// Not yet known: the list is still in flight. Punctuation rather than a word, because it stands
|
|
187
|
+
// inside a sentence for a second — "… handed it to …" — and any word there would be a claim.
|
|
188
|
+
'inventory.member_loading': '…',
|
|
189
|
+
// Known to be somebody, and which somebody cannot be found out: the members request failed. A
|
|
190
|
+
// fact about the request, never about the person.
|
|
191
|
+
'inventory.member_unknown': 'Someone',
|
|
192
|
+
|
|
193
|
+
// ---- history ----------------------------------------------------------------------------
|
|
194
|
+
'inventory.history': 'History',
|
|
195
|
+
'inventory.history_empty': 'Nothing has happened to this yet',
|
|
196
|
+
'inventory.history_error': 'The history could not be loaded',
|
|
197
|
+
// One sentence per action. `actionKey()` in `timeline.ts` builds these key names, so a key here
|
|
198
|
+
// and a name there are one pair — and `history_unknown` is what an action written by a newer
|
|
199
|
+
// image resolves to rather than a wrong sentence.
|
|
200
|
+
'inventory.history_created': '{actor} added it',
|
|
201
|
+
'inventory.history_updated': '{actor} edited it',
|
|
202
|
+
'inventory.history_assigned': '{actor} handed it to {person}',
|
|
203
|
+
'inventory.history_transferred': '{actor} handed it on to {person}',
|
|
204
|
+
'inventory.history_returned': '{actor} took it back from {person}',
|
|
205
|
+
'inventory.history_retired': '{actor} archived it',
|
|
206
|
+
'inventory.history_restored': '{actor} restored it',
|
|
207
|
+
'inventory.history_unknown': '{actor} changed it — {action}',
|
|
208
|
+
'inventory.history_set': '{field} set to {to}',
|
|
209
|
+
'inventory.history_cleared': '{field} cleared',
|
|
210
|
+
'inventory.history_changed': '{field} changed from {from} to {to}',
|
|
211
|
+
// For a field whose value is an opaque id — a photo — where naming the value would print a uuid.
|
|
212
|
+
'inventory.history_replaced': '{field} replaced',
|
|
213
|
+
// A description is up to eight thousand characters, so "changed from … to …" put sixteen
|
|
214
|
+
// kilobytes of somebody's prose in one row of a 440px panel and pushed every entry below it off
|
|
215
|
+
// the screen. It says *that* it changed; the text is one keystroke away, labelled and in full.
|
|
216
|
+
'inventory.history_text_changed': '{field} changed',
|
|
217
|
+
'inventory.history_show_text': 'Show the text',
|
|
218
|
+
'inventory.history_text_before': 'Before',
|
|
219
|
+
'inventory.history_text_after': 'After',
|
|
220
|
+
'inventory.history_note': 'Note: {note}',
|
|
221
|
+
// A repair's summary and a file's name are printed under these as a second line, bare — they are
|
|
222
|
+
// text somebody typed, so there is nothing to translate around them.
|
|
223
|
+
'inventory.history_repair_logged': '{actor} sent it for repair',
|
|
224
|
+
'inventory.history_repair_completed': '{actor} logged it as back from repair',
|
|
225
|
+
'inventory.history_attachment_added': '{actor} attached a file',
|
|
226
|
+
'inventory.history_attachment_removed': '{actor} removed a file',
|
|
227
|
+
|
|
228
|
+
// ---- the asset panel --------------------------------------------------------------------
|
|
229
|
+
'inventory.details': 'Details',
|
|
230
|
+
'inventory.open': 'Open',
|
|
231
|
+
'inventory.open_asset': 'Open {name}',
|
|
232
|
+
'inventory.asset_error': 'This asset could not be loaded',
|
|
233
|
+
'inventory.added_on': 'Added',
|
|
234
|
+
'inventory.updated_on': 'Last changed',
|
|
235
|
+
'inventory.photo': 'Photo',
|
|
236
|
+
|
|
237
|
+
// ---- repairs ----------------------------------------------------------------------------
|
|
238
|
+
'inventory.repairs': 'Repairs',
|
|
239
|
+
'inventory.repairs_error': 'The repairs could not be loaded',
|
|
240
|
+
'inventory.repairs_empty': 'Nothing has been repaired yet',
|
|
241
|
+
'inventory.repairs_empty_desc':
|
|
242
|
+
'When something goes away to be fixed, record it here so the register can say where it is.',
|
|
243
|
+
'inventory.repair_new': 'Send for repair',
|
|
244
|
+
'inventory.repair_edit': 'Edit repair',
|
|
245
|
+
'inventory.repair_summary': 'What is wrong',
|
|
246
|
+
'inventory.repair_summary_placeholder': 'Cracked screen, new battery…',
|
|
247
|
+
'inventory.repair_detail': 'Details',
|
|
248
|
+
'inventory.repair_vendor': 'Repairer',
|
|
249
|
+
'inventory.repair_vendor_placeholder': 'Who is fixing it',
|
|
250
|
+
'inventory.repair_cost': 'Cost',
|
|
251
|
+
'inventory.repair_sent_on': 'Sent',
|
|
252
|
+
'inventory.repair_returned_on': 'Came back',
|
|
253
|
+
'inventory.repair_current': 'Away for repair',
|
|
254
|
+
'inventory.repair_past': 'Past repairs',
|
|
255
|
+
'inventory.repair_away_since': 'Away since {date}',
|
|
256
|
+
'inventory.repair_complete': 'Log it as returned',
|
|
257
|
+
'inventory.repair_complete_title': 'Log {name} as returned?',
|
|
258
|
+
'inventory.repair_complete_body':
|
|
259
|
+
'It goes back to whoever is holding it, or into stock if nobody is. Add the cost if the invoice has arrived.',
|
|
260
|
+
'inventory.repair_logged_toast': '{name} sent for repair',
|
|
261
|
+
'inventory.repair_saved_toast': 'Repair saved',
|
|
262
|
+
'inventory.repair_completed_toast': '{name} logged as returned',
|
|
263
|
+
'inventory.repair_archived_hint': 'Restore this item before sending it for repair.',
|
|
264
|
+
'inventory.widget_repairs_title': 'Out for repair',
|
|
265
|
+
'inventory.widget_repairs_desc': 'Everything that is away being fixed right now.',
|
|
266
|
+
'inventory.widget_repairs_empty': 'Nothing is away for repair',
|
|
267
|
+
|
|
268
|
+
// ---- files ------------------------------------------------------------------------------
|
|
269
|
+
'inventory.files': 'Files',
|
|
270
|
+
'inventory.files_error': 'The files could not be loaded',
|
|
271
|
+
'inventory.files_empty': 'No files yet',
|
|
272
|
+
'inventory.files_empty_desc':
|
|
273
|
+
'Keep the receipt, the warranty card and the manual with the item they belong to.',
|
|
274
|
+
'inventory.file_add': 'Add a file',
|
|
275
|
+
'inventory.file_download': 'Download {name}',
|
|
276
|
+
'inventory.file_remove': 'Remove {name}',
|
|
277
|
+
'inventory.file_remove_title': 'Remove {name}?',
|
|
278
|
+
// Says what survives: this module records that a file belongs to an item, and never owns the file.
|
|
279
|
+
'inventory.file_remove_body':
|
|
280
|
+
'It stops being listed against this item. The file itself is not deleted, and anywhere else it is attached keeps it.',
|
|
281
|
+
'inventory.file_removed_toast': '{name} removed',
|
|
282
|
+
'inventory.file_added_toast': { one: '{n} file added', other: '{n} files added' },
|
|
283
|
+
'inventory.file_upload_failed': '{name} could not be uploaded',
|
|
284
|
+
// What a row is called when the file's own record could not be read. It is a label this module
|
|
285
|
+
// prints, so it is translated — it was a hardcoded English literal in `api-instance.ts`.
|
|
286
|
+
'inventory.file_unnamed': 'Uploaded file',
|
|
287
|
+
|
|
288
|
+
// ---- the photo, which is a field of the asset rather than one of its files ---------------
|
|
289
|
+
'inventory.photo_none': 'No photo yet',
|
|
290
|
+
'inventory.photo_set': 'Choose a photo',
|
|
291
|
+
'inventory.photo_replace': 'Replace the photo',
|
|
292
|
+
'inventory.photo_remove': 'Remove the photo',
|
|
293
|
+
'inventory.photo_saved_toast': 'Photo saved',
|
|
294
|
+
'inventory.photo_removed_toast': 'Photo removed',
|
|
295
|
+
'inventory.photo_alt': 'Photo of {name}',
|
|
296
|
+
|
|
297
|
+
// ---- the register in numbers ------------------------------------------------------------
|
|
298
|
+
'inventory.stats_total': 'Assets',
|
|
299
|
+
'inventory.stats_unassigned': 'Nobody holding',
|
|
300
|
+
'inventory.stats_out_for_repair': 'Out for repair',
|
|
301
|
+
|
|
302
|
+
// ---- what a refusal reads as ------------------------------------------------------------
|
|
303
|
+
// Every screen used to show `error.message`, which is a sentence the *server* wrote, in English,
|
|
304
|
+
// to a reader who chose Persian. `errors.ts` maps the stable `reason` token each refusal carries
|
|
305
|
+
// — `inventory.custody.already_held` and the rest — onto these, and falls back to the class of
|
|
306
|
+
// failure. The wording is what the reader can do next, not an apology.
|
|
307
|
+
'inventory.error_custody_conflict':
|
|
308
|
+
'Somebody changed who is holding this a moment before you did. Reload the page to see where it is now.',
|
|
309
|
+
'inventory.error_custody_archived': 'This item is archived. Restore it before handing it over.',
|
|
310
|
+
'inventory.error_custody_already_held':
|
|
311
|
+
'Somebody is already holding this. Hand it on, or take it back first.',
|
|
312
|
+
'inventory.error_custody_not_held':
|
|
313
|
+
'Nobody is holding this, so there is nothing to hand on. Hand it over instead.',
|
|
314
|
+
'inventory.error_asset_still_held': 'Somebody is still holding this. Take it back before archiving it.',
|
|
315
|
+
'inventory.error_asset_under_repair':
|
|
316
|
+
'This item is away for repair. Log it as returned before archiving it.',
|
|
317
|
+
'inventory.error_repair_already_open':
|
|
318
|
+
'This item is already away for repair. Log that repair as returned first.',
|
|
319
|
+
'inventory.error_repair_archived': 'This item is archived. Restore it before sending it for repair.',
|
|
320
|
+
'inventory.error_repair_already_complete': 'This repair is already logged as finished.',
|
|
321
|
+
'inventory.error_repair_returned_before_sent':
|
|
322
|
+
'A repair cannot come back before it was sent. Check the two dates.',
|
|
323
|
+
'inventory.error_category_name_taken': 'This workspace already has a category with that name.',
|
|
324
|
+
// The refusal a reorder earns when somebody added, archived or restored a category in another tab
|
|
325
|
+
// while this page was open. The list in hand no longer describes the workspace, so the server
|
|
326
|
+
// refuses the whole thing rather than renumbering what it was given and dropping the rest
|
|
327
|
+
// somewhere nobody chose.
|
|
328
|
+
//
|
|
329
|
+
// Three facts, in the order somebody needs them: what happened, that **this arrangement was not
|
|
330
|
+
// saved**, and that the list on screen is the current one. The middle one used to be missing, and
|
|
331
|
+
// the sentence went straight from "somebody changed the categories" to "put them in order again"
|
|
332
|
+
// — which reads as though the drag had landed and only needed repeating. It also said the list had
|
|
333
|
+
// been refreshed while the screen was still holding the very list the server had refused, so
|
|
334
|
+
// repeating the drag earned the same refusal for ever. `reseed` is what makes the last clause true.
|
|
335
|
+
'inventory.error_category_order_stale':
|
|
336
|
+
'Somebody else changed the categories while this page was open, so this order was not saved. The list below has been refreshed — arrange it again.',
|
|
337
|
+
// A stated ceiling rather than a silent one. `categories.reorder` is handed every live category at
|
|
338
|
+
// once, so its input array has a bound; leaving the bound only there would let a workspace grow
|
|
339
|
+
// past it one category at a time and then find the only procedure that can order them refusing to
|
|
340
|
+
// run. The number is `MAX_LIVE_CATEGORIES` from the contract, passed through `t` so it is written
|
|
341
|
+
// in the reader's own digits — and archiving really does make room, because the limit counts the
|
|
342
|
+
// live rows.
|
|
343
|
+
'inventory.error_category_limit_reached':
|
|
344
|
+
'A workspace can keep {max} categories at once, and this one has them all. Archive one it no longer uses to make room.',
|
|
345
|
+
// The classes of failure, for a refusal carrying no reason of its own. A capability switched off
|
|
346
|
+
// answers 404 rather than 403 — that is the module contract — so it lands on `not_found`, which
|
|
347
|
+
// is the right sentence for it: the surface is not there any more, look again.
|
|
348
|
+
'inventory.error_not_found':
|
|
349
|
+
'That is no longer there. Somebody may have removed or archived it — reload the page to see.',
|
|
350
|
+
'inventory.error_forbidden': 'You are not allowed to do that.',
|
|
351
|
+
'inventory.error_module_disabled': 'Inventory is switched off in this workspace.',
|
|
352
|
+
'inventory.error_conflict': 'Somebody changed this a moment before you did. Reload the page and try again.',
|
|
353
|
+
'inventory.error_bad_request': 'Something in the form was not accepted. Check what you entered.',
|
|
354
|
+
// Not the same failure, and it used to borrow that sentence. A service refusing — the person is
|
|
355
|
+
// not a member of this workspace, the file has not finished uploading — arrives as the same
|
|
356
|
+
// `BAD_REQUEST` as a schema rejecting a field, and "check what you entered" sent people to hunt
|
|
357
|
+
// through a form where nothing was wrong. This one says only what is true and lets the server's
|
|
358
|
+
// own explanation follow it.
|
|
359
|
+
'inventory.error_refused': 'That was not accepted.',
|
|
360
|
+
'inventory.error_unauthorized': 'Your session has ended. Sign in again.',
|
|
361
|
+
'inventory.error_rate_limited': 'Too many requests just now. Wait a moment and try again.',
|
|
362
|
+
'inventory.error_unavailable': 'The server is not answering right now. Try again in a moment.',
|
|
363
|
+
// The last resort, and the only one that keeps the server's own words — under it, as detail. A
|
|
364
|
+
// failure this build has never heard of is one where the server's sentence is the only clue left.
|
|
365
|
+
'inventory.error_unknown': 'That did not work.',
|
|
92
366
|
}
|
|
93
367
|
|
|
94
368
|
export type InventoryMessageKey = keyof typeof en
|
|
@@ -121,7 +395,9 @@ export const fa: Record<string, Message> = {
|
|
|
121
395
|
'inventory.price_invalid': 'مبلغی مانند {example} وارد کنید',
|
|
122
396
|
'inventory.count': { one: '{n} قلم', other: '{n} قلم' },
|
|
123
397
|
'inventory.count_showing': { one: 'نمایش {n} قلم', other: 'نمایش {n} قلم' },
|
|
124
|
-
|
|
398
|
+
// «جستوجو» with the ZWNJ, never «جستجو» — `repos/shell/messages/GLOSSARY.md` settles the
|
|
399
|
+
// spelling and the shell's own catalogue writes it that way in all fourteen places it has one.
|
|
400
|
+
'inventory.search_placeholder': 'جستوجو بر اساس نام، کد یا سریال…',
|
|
125
401
|
'inventory.filter_all_statuses': 'همه وضعیتها',
|
|
126
402
|
'inventory.archived': 'بایگانیشده',
|
|
127
403
|
'inventory.restore': 'بازگردانی',
|
|
@@ -154,13 +430,212 @@ export const fa: Record<string, Message> = {
|
|
|
154
430
|
'inventory.settings_pad_hint': 'عدد تا چند رقم با صفر پر شود.',
|
|
155
431
|
'inventory.settings_pad_invalid': 'عددی درست از ۱ تا ۱۰ وارد کنید',
|
|
156
432
|
'inventory.settings_preview': 'نمونهٔ کد',
|
|
157
|
-
'inventory.settings_saved': 'تنظیمات
|
|
158
|
-
'inventory.settings_save_error': 'تنظیمات ذخیره نشد',
|
|
433
|
+
'inventory.settings_saved': 'تنظیمات ذخیره شد',
|
|
159
434
|
'inventory.settings_error': 'تنظیمات بارگذاری نشد',
|
|
160
435
|
'inventory.settings_readonly': 'این تنظیمات را میبینید اما نمیتوانید تغییر دهید.',
|
|
161
436
|
'inventory.settings_not_enabled': 'ماژول اموال در این فضای کاری فعال نیست',
|
|
437
|
+
|
|
438
|
+
'inventory.settings_notices': 'اطلاعرسانی',
|
|
439
|
+
// The «که» is not optional: without it the clause has no head and the sentence reads as two
|
|
440
|
+
// halves stapled together, which is what a sentence translated word by word from English does.
|
|
441
|
+
'inventory.settings_notices_desc':
|
|
442
|
+
'اینکه چه زمانی به این فضای کاری خبر داده شود که گارانتی قلمی رو به پایان است، یا قلمی بیش از اندازه نزد تعمیرکار مانده است.',
|
|
443
|
+
'inventory.settings_warranty_days': 'چند روز پیش از پایان گارانتی هشدار داده شود',
|
|
444
|
+
'inventory.settings_warranty_days_hint':
|
|
445
|
+
'چقدر پیش از پایان گارانتی به کسی خبر داده شود. برای هر قلم یک بار، به کسی که آن را در اختیار دارد.',
|
|
446
|
+
'inventory.settings_repair_days': 'پس از چند روز پیگیری تعمیر خواسته شود',
|
|
447
|
+
'inventory.settings_repair_days_hint':
|
|
448
|
+
'یک قلم چند روز میتواند نزد تعمیرکار بماند تا از کسی که تعمیر را ثبت کرده پیگیری خواسته شود.',
|
|
449
|
+
'inventory.settings_days_invalid': 'عددی درست میان ۱ تا ۳۶۵ روز وارد کنید',
|
|
450
|
+
'inventory.held_by': 'در اختیار {name}',
|
|
451
|
+
'inventory.held_by_clear': 'نمایش همهٔ اقلام',
|
|
162
452
|
'inventory.widget_title': 'اقلام اخیر',
|
|
163
453
|
'inventory.widget_desc': 'آخرین اقلامی که به این فضای کاری اضافه شدهاند.',
|
|
454
|
+
|
|
455
|
+
'inventory.category': 'دستهبندی',
|
|
456
|
+
'inventory.category_none': 'بدون دستهبندی',
|
|
457
|
+
'inventory.filter_all_categories': 'همهٔ دستهبندیها',
|
|
458
|
+
'inventory.categories_error': 'دستهبندیها بارگذاری نشد',
|
|
459
|
+
'inventory.settings_categories': 'دستهبندیها',
|
|
460
|
+
'inventory.settings_categories_desc': 'شیوهٔ گروهبندی اموال در این فضای کاری.',
|
|
461
|
+
'inventory.categories_empty': 'هنوز دستهبندیای ساخته نشده است',
|
|
462
|
+
'inventory.categories_empty_desc':
|
|
463
|
+
'آنچه شرکت دارد را گروهبندی کنید — لپتاپ، مبلمان، دوربین — تا فهرست بلند به یک نوع محدود شود.',
|
|
464
|
+
'inventory.categories_all_archived': 'همهٔ دستهبندیها بایگانی شدهاند',
|
|
465
|
+
'inventory.categories_all_archived_desc':
|
|
466
|
+
'بایگانیشدهها را نشان بدهید تا یکی را بازگردانید، یا دستهٔ تازهای بسازید.',
|
|
467
|
+
'inventory.category_new': 'دستهٔ جدید',
|
|
468
|
+
'inventory.category_edit': 'ویرایش دستهبندی',
|
|
469
|
+
'inventory.category_name_placeholder': 'لپتاپ، مبلمان، دوربین…',
|
|
470
|
+
// فارسی جمله را با هدف آغاز میکند، نه با کنش — برعکس انگلیسی.
|
|
471
|
+
'inventory.category_reorder_hint':
|
|
472
|
+
'برای تغییر ترتیب نمایش، دستهبندی را بکشید یا از پیکانهای همان ردیف استفاده کنید.',
|
|
473
|
+
'inventory.category_move_up': 'انتقال {name} به بالا',
|
|
474
|
+
'inventory.category_move_down': 'انتقال {name} به پایین',
|
|
475
|
+
'inventory.category_position_first': '{name} در ابتدای فهرست است',
|
|
476
|
+
'inventory.category_position_last': '{name} در انتهای فهرست است',
|
|
477
|
+
'inventory.category_position_after': '{name} پس از {other} است',
|
|
478
|
+
'inventory.category_created_toast': '{name} افزوده شد',
|
|
479
|
+
'inventory.category_updated_toast': '{name} ذخیره شد',
|
|
480
|
+
'inventory.category_archived_toast': '{name} بایگانی شد',
|
|
481
|
+
'inventory.category_restored_toast': '{name} بازگردانده شد',
|
|
482
|
+
'inventory.category_archive_title': '{name} بایگانی شود؟',
|
|
483
|
+
'inventory.category_archive_body':
|
|
484
|
+
'از فهرست انتخاب و از فیلترها کنار میرود. اقلامی که پیشتر در این دسته ثبت شدهاند همچنان همین دسته را نشان میدهند و هر زمان میتوانید آن را بازگردانید.',
|
|
485
|
+
|
|
486
|
+
'inventory.custody': 'تحویل',
|
|
487
|
+
'inventory.custody_holder': 'در اختیارِ',
|
|
488
|
+
'inventory.custody_nobody': 'کسی آن را در اختیار ندارد — در انبار است',
|
|
489
|
+
'inventory.custody_since': 'از {date} در اختیار اوست',
|
|
490
|
+
'inventory.custody_assign': 'تحویل دادن',
|
|
491
|
+
'inventory.custody_transfer': 'تحویل به فرد دیگر',
|
|
492
|
+
'inventory.custody_return': 'پس گرفتن',
|
|
493
|
+
'inventory.custody_assign_title': 'تحویل {name}',
|
|
494
|
+
'inventory.custody_transfer_title': 'تحویل {name} به فرد دیگر',
|
|
495
|
+
'inventory.custody_return_title': '{name} پس گرفته شود؟',
|
|
496
|
+
'inventory.custody_return_body': 'به انبار برمیگردد و {person} دیگر پاسخگوی آن نیست.',
|
|
497
|
+
'inventory.custody_person': 'تحویلگیرنده',
|
|
498
|
+
'inventory.custody_person_none': 'یک نفر را انتخاب کنید',
|
|
499
|
+
'inventory.custody_note': 'یادداشت',
|
|
500
|
+
'inventory.custody_note_hint': 'اختیاری — کجا میرود یا برای چه کاری است.',
|
|
501
|
+
'inventory.custody_assigned_toast': '{name} به {person} تحویل داده شد',
|
|
502
|
+
'inventory.custody_transferred_toast': '{name} به {person} واگذار شد',
|
|
503
|
+
'inventory.custody_returned_toast': '{name} پس گرفته شد',
|
|
504
|
+
'inventory.custody_previous': 'تحویلگیرندگان پیشین',
|
|
505
|
+
'inventory.custody_empty': 'هنوز کسی این قلم را تحویل نگرفته است',
|
|
506
|
+
'inventory.custody_empty_desc': 'به کسی تحویل بدهید تا اینجا ثبت شود.',
|
|
507
|
+
'inventory.custody_error': 'سابقهٔ تحویل بارگذاری نشد',
|
|
508
|
+
'inventory.custody_archived_hint': 'پیش از تحویل، این قلم را از بایگانی بازگردانید.',
|
|
509
|
+
'inventory.member_former': 'عضو سابق',
|
|
510
|
+
'inventory.member_system': 'سامانه',
|
|
511
|
+
'inventory.member_loading': '…',
|
|
512
|
+
'inventory.member_unknown': 'کسی',
|
|
513
|
+
|
|
514
|
+
'inventory.history': 'تاریخچه',
|
|
515
|
+
'inventory.history_empty': 'هنوز اتفاقی برای این قلم نیفتاده است',
|
|
516
|
+
'inventory.history_error': 'تاریخچه بارگذاری نشد',
|
|
517
|
+
'inventory.history_created': '{actor} آن را افزود',
|
|
518
|
+
'inventory.history_updated': '{actor} آن را ویرایش کرد',
|
|
519
|
+
'inventory.history_assigned': '{actor} آن را به {person} تحویل داد',
|
|
520
|
+
'inventory.history_transferred': '{actor} آن را به {person} واگذار کرد',
|
|
521
|
+
'inventory.history_returned': '{actor} آن را از {person} پس گرفت',
|
|
522
|
+
'inventory.history_retired': '{actor} آن را بایگانی کرد',
|
|
523
|
+
'inventory.history_restored': '{actor} آن را بازگرداند',
|
|
524
|
+
'inventory.history_unknown': '{actor} آن را تغییر داد — {action}',
|
|
525
|
+
'inventory.history_set': '{field} روی {to} تنظیم شد',
|
|
526
|
+
'inventory.history_cleared': '{field} پاک شد',
|
|
527
|
+
'inventory.history_changed': '{field} از {from} به {to} تغییر کرد',
|
|
528
|
+
'inventory.history_replaced': '{field} جایگزین شد',
|
|
529
|
+
'inventory.history_text_changed': '{field} تغییر کرد',
|
|
530
|
+
'inventory.history_show_text': 'نمایش متن',
|
|
531
|
+
'inventory.history_text_before': 'پیش از این',
|
|
532
|
+
'inventory.history_text_after': 'پس از این',
|
|
533
|
+
'inventory.history_note': 'یادداشت: {note}',
|
|
534
|
+
'inventory.history_repair_logged': '{actor} آن را برای تعمیر فرستاد',
|
|
535
|
+
'inventory.history_repair_completed': '{actor} بازگشت آن از تعمیر را ثبت کرد',
|
|
536
|
+
'inventory.history_attachment_added': '{actor} فایلی پیوست کرد',
|
|
537
|
+
'inventory.history_attachment_removed': '{actor} فایلی را حذف کرد',
|
|
538
|
+
|
|
539
|
+
'inventory.details': 'مشخصات',
|
|
540
|
+
'inventory.open': 'باز کردن',
|
|
541
|
+
'inventory.open_asset': 'باز کردن {name}',
|
|
542
|
+
'inventory.asset_error': 'این قلم بارگذاری نشد',
|
|
543
|
+
'inventory.added_on': 'افزودهشده',
|
|
544
|
+
'inventory.updated_on': 'آخرین تغییر',
|
|
545
|
+
'inventory.photo': 'عکس',
|
|
546
|
+
|
|
547
|
+
'inventory.repairs': 'تعمیرها',
|
|
548
|
+
'inventory.repairs_error': 'تعمیرها بارگذاری نشد',
|
|
549
|
+
'inventory.repairs_empty': 'هنوز تعمیری ثبت نشده است',
|
|
550
|
+
'inventory.repairs_empty_desc': 'وقتی چیزی برای تعمیر بیرون میرود، همینجا ثبتش کنید تا معلوم باشد کجاست.',
|
|
551
|
+
'inventory.repair_new': 'ارسال برای تعمیر',
|
|
552
|
+
'inventory.repair_edit': 'ویرایش تعمیر',
|
|
553
|
+
'inventory.repair_summary': 'ایراد چیست',
|
|
554
|
+
'inventory.repair_summary_placeholder': 'شکستگی صفحه، تعویض باتری…',
|
|
555
|
+
'inventory.repair_detail': 'توضیحات',
|
|
556
|
+
'inventory.repair_vendor': 'تعمیرکار',
|
|
557
|
+
'inventory.repair_vendor_placeholder': 'چه کسی آن را تعمیر میکند',
|
|
558
|
+
'inventory.repair_cost': 'هزینه',
|
|
559
|
+
'inventory.repair_sent_on': 'تاریخ ارسال',
|
|
560
|
+
'inventory.repair_returned_on': 'تاریخ بازگشت',
|
|
561
|
+
'inventory.repair_current': 'در تعمیر است',
|
|
562
|
+
'inventory.repair_past': 'تعمیرهای پیشین',
|
|
563
|
+
'inventory.repair_away_since': 'از {date} بیرون است',
|
|
564
|
+
'inventory.repair_complete': 'ثبت بازگشت',
|
|
565
|
+
'inventory.repair_complete_title': 'بازگشت {name} ثبت شود؟',
|
|
566
|
+
'inventory.repair_complete_body':
|
|
567
|
+
'به همان کسی برمیگردد که آن را در اختیار دارد و اگر کسی آن را ندارد، به انبار میرود. اگر فاکتور رسیده است، هزینه را هم وارد کنید.',
|
|
568
|
+
'inventory.repair_logged_toast': '{name} برای تعمیر فرستاده شد',
|
|
569
|
+
'inventory.repair_saved_toast': 'تعمیر ذخیره شد',
|
|
570
|
+
'inventory.repair_completed_toast': 'بازگشت {name} ثبت شد',
|
|
571
|
+
'inventory.repair_archived_hint': 'پیش از فرستادن برای تعمیر، این قلم را از بایگانی بازگردانید.',
|
|
572
|
+
'inventory.widget_repairs_title': 'در تعمیر',
|
|
573
|
+
'inventory.widget_repairs_desc': 'هر چیزی که همین حالا برای تعمیر بیرون است.',
|
|
574
|
+
'inventory.widget_repairs_empty': 'چیزی در تعمیر نیست',
|
|
575
|
+
|
|
576
|
+
'inventory.files': 'فایلها',
|
|
577
|
+
'inventory.files_error': 'فایلها بارگذاری نشد',
|
|
578
|
+
'inventory.files_empty': 'هنوز فایلی نیست',
|
|
579
|
+
'inventory.files_empty_desc':
|
|
580
|
+
'فاکتور، برگهٔ گارانتی و دفترچهٔ راهنما را کنار همان چیزی نگه دارید که به آن مربوطاند.',
|
|
581
|
+
'inventory.file_add': 'افزودن فایل',
|
|
582
|
+
'inventory.file_download': 'دانلود {name}',
|
|
583
|
+
'inventory.file_remove': 'حذف {name}',
|
|
584
|
+
'inventory.file_remove_title': '{name} حذف شود؟',
|
|
585
|
+
'inventory.file_remove_body':
|
|
586
|
+
'دیگر ذیل این قلم فهرست نمیشود. خود فایل حذف نمیشود و هر جای دیگری که پیوست شده باشد، آن را نگه میدارد.',
|
|
587
|
+
'inventory.file_removed_toast': '{name} حذف شد',
|
|
588
|
+
'inventory.file_added_toast': { one: '{n} فایل افزوده شد', other: '{n} فایل افزوده شد' },
|
|
589
|
+
'inventory.file_upload_failed': '{name} بارگذاری نشد',
|
|
590
|
+
'inventory.file_unnamed': 'فایل بارگذاریشده',
|
|
591
|
+
|
|
592
|
+
'inventory.photo_none': 'هنوز عکسی نیست',
|
|
593
|
+
'inventory.photo_set': 'انتخاب عکس',
|
|
594
|
+
'inventory.photo_replace': 'تعویض عکس',
|
|
595
|
+
'inventory.photo_remove': 'حذف عکس',
|
|
596
|
+
'inventory.photo_saved_toast': 'عکس ذخیره شد',
|
|
597
|
+
'inventory.photo_removed_toast': 'عکس حذف شد',
|
|
598
|
+
'inventory.photo_alt': 'عکس {name}',
|
|
599
|
+
|
|
600
|
+
'inventory.stats_total': 'اقلام',
|
|
601
|
+
'inventory.stats_unassigned': 'بدون تحویلگیرنده',
|
|
602
|
+
'inventory.stats_out_for_repair': 'در تعمیر',
|
|
603
|
+
|
|
604
|
+
// «بارگذاری مجدد» is what the shell calls Reload (`pwa_update_reload`), so these use its verb.
|
|
605
|
+
'inventory.error_custody_conflict':
|
|
606
|
+
'کسی درست پیش از شما تغییر داد که این قلم در اختیار چه کسی است. صفحه را دوباره بارگذاری کنید تا ببینید اکنون کجاست.',
|
|
607
|
+
'inventory.error_custody_archived': 'این قلم بایگانی شده است. پیش از تحویل، آن را بازگردانید.',
|
|
608
|
+
'inventory.error_custody_already_held':
|
|
609
|
+
'این قلم هماکنون در اختیار کسی است. آن را واگذار کنید، یا نخست پس بگیرید.',
|
|
610
|
+
'inventory.error_custody_not_held':
|
|
611
|
+
'این قلم در اختیار کسی نیست، پس چیزی برای واگذاری وجود ندارد. بهجای آن، تحویلش بدهید.',
|
|
612
|
+
'inventory.error_asset_still_held': 'این قلم هنوز در اختیار کسی است. پیش از بایگانی، آن را پس بگیرید.',
|
|
613
|
+
'inventory.error_asset_under_repair':
|
|
614
|
+
'این قلم برای تعمیر بیرون است. پیش از بایگانی، بازگشت آن را ثبت کنید.',
|
|
615
|
+
'inventory.error_repair_already_open':
|
|
616
|
+
'این قلم هماکنون برای تعمیر بیرون است. نخست بازگشت همان تعمیر را ثبت کنید.',
|
|
617
|
+
'inventory.error_repair_archived': 'این قلم بایگانی شده است. پیش از فرستادن برای تعمیر، آن را بازگردانید.',
|
|
618
|
+
'inventory.error_repair_already_complete': 'بازگشت این تعمیر پیشتر ثبت شده است.',
|
|
619
|
+
'inventory.error_repair_returned_before_sent':
|
|
620
|
+
'تعمیر نمیتواند پیش از فرستادهشدن بازگردد. دو تاریخ را بررسی کنید.',
|
|
621
|
+
'inventory.error_category_name_taken': 'این فضای کاری از پیش دستهبندیای با این نام دارد.',
|
|
622
|
+
// فارسی جمله را با زمان آغاز میکند، نه با فاعل — برعکس انگلیسی.
|
|
623
|
+
'inventory.error_category_order_stale':
|
|
624
|
+
'هنگامی که این صفحه باز بود، کس دیگری دستهبندیها را تغییر داد؛ بنابراین این ترتیب ذخیره نشد. فهرست زیر تازه شده است — دوباره مرتبش کنید.',
|
|
625
|
+
'inventory.error_category_limit_reached':
|
|
626
|
+
'هر فضای کاری همزمان میتواند {max} دستهبندی داشته باشد و این فضا همه را دارد. برای باز شدن جا، دستهبندیای را که دیگر به کار نمیآید بایگانی کنید.',
|
|
627
|
+
'inventory.error_not_found':
|
|
628
|
+
'آن دیگر آنجا نیست. شاید کسی حذف یا بایگانیاش کرده باشد — صفحه را دوباره بارگذاری کنید.',
|
|
629
|
+
'inventory.error_forbidden': 'اجازهٔ این کار را ندارید.',
|
|
630
|
+
'inventory.error_module_disabled': 'ماژول اموال در این فضای کاری خاموش است.',
|
|
631
|
+
'inventory.error_conflict':
|
|
632
|
+
'کسی درست پیش از شما این را تغییر داد. صفحه را دوباره بارگذاری کنید و باز تلاش کنید.',
|
|
633
|
+
'inventory.error_bad_request': 'چیزی در این فرم پذیرفته نشد. آنچه وارد کردهاید را بررسی کنید.',
|
|
634
|
+
'inventory.error_refused': 'این درخواست پذیرفته نشد.',
|
|
635
|
+
'inventory.error_unauthorized': 'نشست شما پایان یافته است. دوباره وارد شوید.',
|
|
636
|
+
'inventory.error_rate_limited': 'درخواستها بیش از اندازه است. کمی صبر کنید و باز تلاش کنید.',
|
|
637
|
+
'inventory.error_unavailable': 'سرور همین حالا پاسخ نمیدهد. کمی بعد باز تلاش کنید.',
|
|
638
|
+
'inventory.error_unknown': 'این کار انجام نشد.',
|
|
164
639
|
}
|
|
165
640
|
|
|
166
641
|
export const ar: Record<string, Message> = {
|
|
@@ -235,13 +710,204 @@ export const ar: Record<string, Message> = {
|
|
|
235
710
|
'inventory.settings_pad_hint': 'إلى كم خانة يُستكمل الرقم بالأصفار.',
|
|
236
711
|
'inventory.settings_pad_invalid': 'أدخل عددًا صحيحًا من ١ إلى ١٠',
|
|
237
712
|
'inventory.settings_preview': 'مثال على الرمز',
|
|
238
|
-
'inventory.settings_saved': 'حُفظت
|
|
239
|
-
'inventory.settings_save_error': 'تعذّر حفظ الإعدادات',
|
|
713
|
+
'inventory.settings_saved': 'حُفظت الإعدادات',
|
|
240
714
|
'inventory.settings_error': 'تعذّر تحميل الإعدادات',
|
|
241
715
|
'inventory.settings_readonly': 'يمكنك قراءة هذه الإعدادات دون تغييرها.',
|
|
242
716
|
'inventory.settings_not_enabled': 'وحدة الأصول غير مفعّلة في مساحة العمل هذه',
|
|
717
|
+
|
|
718
|
+
'inventory.settings_notices': 'التنبيهات',
|
|
719
|
+
'inventory.settings_notices_desc':
|
|
720
|
+
'متى تُبلَّغ مساحة العمل بأن ضمان أحد الأصول يوشك على الانتهاء، أو بأن أصلًا بقي لدى ورشة التصليح أطول من اللازم.',
|
|
721
|
+
'inventory.settings_warranty_days': 'التنبيه قبل انتهاء الضمان بهذا العدد من الأيام',
|
|
722
|
+
'inventory.settings_warranty_days_hint':
|
|
723
|
+
'كم يومًا قبل انتهاء الضمان يُبلَّغ أحد. مرة واحدة لكل أصل، إلى من يحمله.',
|
|
724
|
+
'inventory.settings_repair_days': 'متابعة التصليح بعد هذا العدد من الأيام',
|
|
725
|
+
'inventory.settings_repair_days_hint': 'كم يومًا يبقى الأصل لدى الورشة قبل أن يُطلب ممّن سجّل التصليح متابعته.',
|
|
726
|
+
'inventory.settings_days_invalid': 'أدخل عدد أيام صحيحًا بين ١ و٣٦٥',
|
|
727
|
+
'inventory.held_by': 'بحوزة {name}',
|
|
728
|
+
'inventory.held_by_clear': 'عرض كل الأصول',
|
|
243
729
|
'inventory.widget_title': 'أصول حديثة',
|
|
244
730
|
'inventory.widget_desc': 'الأصول المضافة أخيرًا إلى مساحة العمل هذه.',
|
|
731
|
+
|
|
732
|
+
'inventory.category': 'الفئة',
|
|
733
|
+
'inventory.category_none': 'بلا فئة',
|
|
734
|
+
'inventory.filter_all_categories': 'جميع الفئات',
|
|
735
|
+
'inventory.categories_error': 'تعذّر تحميل الفئات',
|
|
736
|
+
'inventory.settings_categories': 'الفئات',
|
|
737
|
+
'inventory.settings_categories_desc': 'كيف تجمّع مساحة العمل هذه ما تملكه.',
|
|
738
|
+
'inventory.categories_empty': 'لا فئات بعد',
|
|
739
|
+
'inventory.categories_empty_desc':
|
|
740
|
+
'اجمع ما تملكه الشركة — حواسيب، أثاث، كاميرات — لتضييق قائمة طويلة إلى نوع واحد.',
|
|
741
|
+
'inventory.categories_all_archived': 'كل الفئات مؤرشفة',
|
|
742
|
+
'inventory.categories_all_archived_desc': 'أظهر المؤرشفة لتستعيد إحداها، أو أضف فئة جديدة.',
|
|
743
|
+
'inventory.category_new': 'فئة جديدة',
|
|
744
|
+
'inventory.category_edit': 'تعديل الفئة',
|
|
745
|
+
'inventory.category_name_placeholder': 'حواسيب، أثاث، كاميرات…',
|
|
746
|
+
'inventory.category_reorder_hint': 'اسحب فئة أو استخدم السهمين في صفّها لتغيير ترتيب ظهورها.',
|
|
747
|
+
'inventory.category_move_up': 'نقل {name} إلى الأعلى',
|
|
748
|
+
'inventory.category_move_down': 'نقل {name} إلى الأسفل',
|
|
749
|
+
'inventory.category_position_first': '{name} في أول القائمة',
|
|
750
|
+
'inventory.category_position_last': '{name} في آخر القائمة',
|
|
751
|
+
'inventory.category_position_after': '{name} بعد {other}',
|
|
752
|
+
'inventory.category_created_toast': 'تمت إضافة {name}',
|
|
753
|
+
'inventory.category_updated_toast': 'تم حفظ {name}',
|
|
754
|
+
'inventory.category_archived_toast': 'تمت أرشفة {name}',
|
|
755
|
+
'inventory.category_restored_toast': 'تمت استعادة {name}',
|
|
756
|
+
'inventory.category_archive_title': 'أرشفة {name}؟',
|
|
757
|
+
'inventory.category_archive_body':
|
|
758
|
+
'تختفي من قائمة الاختيار ومن المرشِّحات. الأصول المصنَّفة فيها تحتفظ بها وتظل تقول ما هي، ويمكنك استعادتها في أي وقت.',
|
|
759
|
+
|
|
760
|
+
'inventory.custody': 'العهدة',
|
|
761
|
+
'inventory.custody_holder': 'في عهدة',
|
|
762
|
+
'inventory.custody_nobody': 'لا أحد — الأصل في المخزن',
|
|
763
|
+
'inventory.custody_since': 'في العهدة منذ {date}',
|
|
764
|
+
'inventory.custody_assign': 'تسليم',
|
|
765
|
+
'inventory.custody_transfer': 'تسليم إلى شخص آخر',
|
|
766
|
+
'inventory.custody_return': 'استرجاع',
|
|
767
|
+
'inventory.custody_assign_title': 'تسليم {name}',
|
|
768
|
+
'inventory.custody_transfer_title': 'تسليم {name} إلى شخص آخر',
|
|
769
|
+
'inventory.custody_return_title': 'استرجاع {name}؟',
|
|
770
|
+
'inventory.custody_return_body': 'يعود إلى المخزن، ولا يعود {person} مسؤولًا عنه.',
|
|
771
|
+
'inventory.custody_person': 'المستلِم',
|
|
772
|
+
'inventory.custody_person_none': 'اختر شخصًا',
|
|
773
|
+
'inventory.custody_note': 'ملاحظة',
|
|
774
|
+
'inventory.custody_note_hint': 'اختياري — إلى أين يذهب أو لأي غرض.',
|
|
775
|
+
'inventory.custody_assigned_toast': 'سُلِّم {name} إلى {person}',
|
|
776
|
+
'inventory.custody_transferred_toast': 'انتقل {name} إلى {person}',
|
|
777
|
+
'inventory.custody_returned_toast': 'تم استرجاع {name}',
|
|
778
|
+
'inventory.custody_previous': 'من كان في عهدته',
|
|
779
|
+
'inventory.custody_empty': 'لم يستلمه أحد بعد',
|
|
780
|
+
'inventory.custody_empty_desc': 'سلِّمه إلى شخص وسيُسجَّل التسليم هنا.',
|
|
781
|
+
'inventory.custody_error': 'تعذّر تحميل سجل العهدة',
|
|
782
|
+
'inventory.custody_archived_hint': 'استعد هذا الأصل من الأرشيف قبل تسليمه.',
|
|
783
|
+
'inventory.member_former': 'عضو سابق',
|
|
784
|
+
'inventory.member_system': 'النظام',
|
|
785
|
+
'inventory.member_loading': '…',
|
|
786
|
+
'inventory.member_unknown': 'شخص ما',
|
|
787
|
+
|
|
788
|
+
'inventory.history': 'السجل',
|
|
789
|
+
'inventory.history_empty': 'لم يحدث شيء لهذا الأصل بعد',
|
|
790
|
+
'inventory.history_error': 'تعذّر تحميل السجل',
|
|
791
|
+
'inventory.history_created': 'أضافه {actor}',
|
|
792
|
+
'inventory.history_updated': 'عدّله {actor}',
|
|
793
|
+
'inventory.history_assigned': 'سلّمه {actor} إلى {person}',
|
|
794
|
+
'inventory.history_transferred': 'نقله {actor} إلى {person}',
|
|
795
|
+
'inventory.history_returned': 'استرجعه {actor} من {person}',
|
|
796
|
+
'inventory.history_retired': 'أرشفه {actor}',
|
|
797
|
+
'inventory.history_restored': 'استعاده {actor}',
|
|
798
|
+
'inventory.history_unknown': 'غيّره {actor} — {action}',
|
|
799
|
+
'inventory.history_set': 'ضُبط {field} على {to}',
|
|
800
|
+
'inventory.history_cleared': 'مُسح {field}',
|
|
801
|
+
'inventory.history_changed': 'تغيّر {field} من {from} إلى {to}',
|
|
802
|
+
'inventory.history_replaced': 'استُبدل {field}',
|
|
803
|
+
'inventory.history_text_changed': 'تغيّر {field}',
|
|
804
|
+
'inventory.history_show_text': 'عرض النص',
|
|
805
|
+
'inventory.history_text_before': 'قبل',
|
|
806
|
+
'inventory.history_text_after': 'بعد',
|
|
807
|
+
'inventory.history_note': 'ملاحظة: {note}',
|
|
808
|
+
'inventory.history_repair_logged': 'أرسله {actor} للإصلاح',
|
|
809
|
+
'inventory.history_repair_completed': 'سجّل {actor} عودته من الإصلاح',
|
|
810
|
+
'inventory.history_attachment_added': 'أرفق {actor} ملفًا',
|
|
811
|
+
'inventory.history_attachment_removed': 'أزال {actor} ملفًا',
|
|
812
|
+
|
|
813
|
+
'inventory.details': 'التفاصيل',
|
|
814
|
+
'inventory.open': 'فتح',
|
|
815
|
+
'inventory.open_asset': 'فتح {name}',
|
|
816
|
+
'inventory.asset_error': 'تعذّر تحميل هذا الأصل',
|
|
817
|
+
'inventory.added_on': 'أُضيف',
|
|
818
|
+
'inventory.updated_on': 'آخر تغيير',
|
|
819
|
+
'inventory.photo': 'الصورة',
|
|
820
|
+
|
|
821
|
+
'inventory.repairs': 'الإصلاحات',
|
|
822
|
+
'inventory.repairs_error': 'تعذّر تحميل الإصلاحات',
|
|
823
|
+
'inventory.repairs_empty': 'لم يُسجَّل أي إصلاح بعد',
|
|
824
|
+
'inventory.repairs_empty_desc': 'حين يخرج شيء للإصلاح، سجّله هنا ليعرف السجل أين هو.',
|
|
825
|
+
'inventory.repair_new': 'إرسال للإصلاح',
|
|
826
|
+
'inventory.repair_edit': 'تعديل الإصلاح',
|
|
827
|
+
'inventory.repair_summary': 'ما العطل',
|
|
828
|
+
'inventory.repair_summary_placeholder': 'شاشة مكسورة، بطارية جديدة…',
|
|
829
|
+
'inventory.repair_detail': 'التفاصيل',
|
|
830
|
+
'inventory.repair_vendor': 'ورشة الإصلاح',
|
|
831
|
+
'inventory.repair_vendor_placeholder': 'من يقوم بالإصلاح',
|
|
832
|
+
'inventory.repair_cost': 'التكلفة',
|
|
833
|
+
'inventory.repair_sent_on': 'تاريخ الإرسال',
|
|
834
|
+
'inventory.repair_returned_on': 'تاريخ العودة',
|
|
835
|
+
'inventory.repair_current': 'خارج للإصلاح',
|
|
836
|
+
'inventory.repair_past': 'إصلاحات سابقة',
|
|
837
|
+
'inventory.repair_away_since': 'خارج منذ {date}',
|
|
838
|
+
'inventory.repair_complete': 'تسجيل عودته',
|
|
839
|
+
'inventory.repair_complete_title': 'تسجيل عودة {name}؟',
|
|
840
|
+
'inventory.repair_complete_body':
|
|
841
|
+
'يعود إلى من هو في عهدته، أو إلى المخزن إن لم يكن في عهدة أحد. أضف التكلفة إن وصلت الفاتورة.',
|
|
842
|
+
'inventory.repair_logged_toast': 'أُرسل {name} للإصلاح',
|
|
843
|
+
'inventory.repair_saved_toast': 'حُفظ الإصلاح',
|
|
844
|
+
'inventory.repair_completed_toast': 'سُجّلت عودة {name}',
|
|
845
|
+
'inventory.repair_archived_hint': 'استعد هذا الأصل من الأرشيف قبل إرساله للإصلاح.',
|
|
846
|
+
'inventory.widget_repairs_title': 'خارج للإصلاح',
|
|
847
|
+
'inventory.widget_repairs_desc': 'كل ما هو خارج للإصلاح الآن.',
|
|
848
|
+
'inventory.widget_repairs_empty': 'لا شيء خارج للإصلاح',
|
|
849
|
+
|
|
850
|
+
'inventory.files': 'الملفات',
|
|
851
|
+
'inventory.files_error': 'تعذّر تحميل الملفات',
|
|
852
|
+
'inventory.files_empty': 'لا ملفات بعد',
|
|
853
|
+
'inventory.files_empty_desc': 'احتفظ بالفاتورة وبطاقة الضمان والدليل مع الشيء الذي تخصّه.',
|
|
854
|
+
'inventory.file_add': 'إضافة ملف',
|
|
855
|
+
'inventory.file_download': 'تنزيل {name}',
|
|
856
|
+
'inventory.file_remove': 'إزالة {name}',
|
|
857
|
+
'inventory.file_remove_title': 'إزالة {name}؟',
|
|
858
|
+
'inventory.file_remove_body':
|
|
859
|
+
'لن يعود مدرجًا مع هذا الأصل. الملف نفسه لا يُحذف، ويبقى مرفقًا في أي مكان آخر أُرفق به.',
|
|
860
|
+
'inventory.file_removed_toast': 'أُزيل {name}',
|
|
861
|
+
'inventory.file_added_toast': {
|
|
862
|
+
zero: 'لم يُضف أي ملف',
|
|
863
|
+
one: 'أُضيف ملف واحد',
|
|
864
|
+
two: 'أُضيف ملفان',
|
|
865
|
+
few: 'أُضيفت {n} ملفات',
|
|
866
|
+
many: 'أُضيف {n} ملفًا',
|
|
867
|
+
other: 'أُضيف {n} ملف',
|
|
868
|
+
},
|
|
869
|
+
'inventory.file_upload_failed': 'تعذّر رفع {name}',
|
|
870
|
+
'inventory.file_unnamed': 'ملف مرفوع',
|
|
871
|
+
|
|
872
|
+
'inventory.photo_none': 'لا صورة بعد',
|
|
873
|
+
'inventory.photo_set': 'اختيار صورة',
|
|
874
|
+
'inventory.photo_replace': 'استبدال الصورة',
|
|
875
|
+
'inventory.photo_remove': 'إزالة الصورة',
|
|
876
|
+
'inventory.photo_saved_toast': 'حُفظت الصورة',
|
|
877
|
+
'inventory.photo_removed_toast': 'أُزيلت الصورة',
|
|
878
|
+
'inventory.photo_alt': 'صورة {name}',
|
|
879
|
+
|
|
880
|
+
'inventory.stats_total': 'الأصول',
|
|
881
|
+
'inventory.stats_unassigned': 'ليست في عهدة أحد',
|
|
882
|
+
'inventory.stats_out_for_repair': 'خارج للإصلاح',
|
|
883
|
+
|
|
884
|
+
// «إعادة التحميل» is what the shell calls Reload (`pwa_update_reload`), so these use its verb.
|
|
885
|
+
'inventory.error_custody_conflict':
|
|
886
|
+
'غيّر أحدهم من يحمل هذا الأصل قبلك بلحظة. أعد تحميل الصفحة لترى أين هو الآن.',
|
|
887
|
+
'inventory.error_custody_archived': 'هذا الأصل مؤرشف. استعده قبل تسليمه.',
|
|
888
|
+
'inventory.error_custody_already_held': 'الأصل في عهدة شخص بالفعل. انقله إلى غيره، أو استرجعه أولًا.',
|
|
889
|
+
'inventory.error_custody_not_held': 'لا أحد يحمل هذا الأصل، فلا شيء لنقله. سلّمه بدلًا من ذلك.',
|
|
890
|
+
'inventory.error_asset_still_held': 'لا يزال الأصل في عهدة أحدهم. استرجعه قبل أرشفته.',
|
|
891
|
+
'inventory.error_asset_under_repair': 'الأصل خارج للإصلاح. سجّل عودته قبل أرشفته.',
|
|
892
|
+
'inventory.error_repair_already_open': 'الأصل خارج للإصلاح بالفعل. سجّل عودة ذلك الإصلاح أولًا.',
|
|
893
|
+
'inventory.error_repair_archived': 'هذا الأصل مؤرشف. استعده قبل إرساله للإصلاح.',
|
|
894
|
+
'inventory.error_repair_already_complete': 'سُجّل هذا الإصلاح منتهيًا بالفعل.',
|
|
895
|
+
'inventory.error_repair_returned_before_sent': 'لا يمكن أن يعود الإصلاح قبل إرساله. راجع التاريخين.',
|
|
896
|
+
'inventory.error_category_name_taken': 'في مساحة العمل هذه فئة بهذا الاسم بالفعل.',
|
|
897
|
+
'inventory.error_category_order_stale':
|
|
898
|
+
'غيّر شخص آخر الفئات بينما كانت هذه الصفحة مفتوحة، فلم يُحفَظ هذا الترتيب. القائمة أدناه محدَّثة — أعد ترتيبها.',
|
|
899
|
+
'inventory.error_category_limit_reached':
|
|
900
|
+
'يمكن لمساحة العمل أن تضم {max} فئة في وقت واحد، وهذه المساحة بلغت العدد. أرشِف فئة لم تعد تُستعمَل لتوفير مكان.',
|
|
901
|
+
'inventory.error_not_found': 'لم يعد ذلك موجودًا. ربما أزاله أحدهم أو أرشفه — أعد تحميل الصفحة لترى.',
|
|
902
|
+
'inventory.error_forbidden': 'لا تملك صلاحية القيام بذلك.',
|
|
903
|
+
'inventory.error_module_disabled': 'وحدة الأصول مُطفأة في مساحة العمل هذه.',
|
|
904
|
+
'inventory.error_conflict': 'غيّر أحدهم هذا قبلك بلحظة. أعد تحميل الصفحة وحاول مرة أخرى.',
|
|
905
|
+
'inventory.error_bad_request': 'لم يُقبل شيء مما في النموذج. راجع ما أدخلته.',
|
|
906
|
+
'inventory.error_refused': 'لم يُقبل هذا الطلب.',
|
|
907
|
+
'inventory.error_unauthorized': 'انتهت جلستك. سجّل الدخول من جديد.',
|
|
908
|
+
'inventory.error_rate_limited': 'طلبات كثيرة في وقت قصير. انتظر قليلًا ثم أعد المحاولة.',
|
|
909
|
+
'inventory.error_unavailable': 'الخادم لا يستجيب الآن. أعد المحاولة بعد قليل.',
|
|
910
|
+
'inventory.error_unknown': 'لم ينجح ذلك.',
|
|
245
911
|
}
|
|
246
912
|
|
|
247
913
|
export const de: Record<string, Message> = {
|
|
@@ -294,7 +960,11 @@ export const de: Record<string, Message> = {
|
|
|
294
960
|
'inventory.no_matches_desc': 'Kein Gegenstand passt zu dieser Suche oder diesen Filtern.',
|
|
295
961
|
'inventory.clear_filters': 'Filter zurücksetzen',
|
|
296
962
|
'inventory.settings_general': 'Allgemein',
|
|
297
|
-
|
|
963
|
+
// "Workspace", not "Arbeitsbereich", in all five places this bundle names one: German keeps the
|
|
964
|
+
// English word, which is a settled row in `repos/shell/messages/GLOSSARY.md` and what the shell's
|
|
965
|
+
// own catalogue does 62 times against 23. One noun, one word, across the screens people read
|
|
966
|
+
// side by side.
|
|
967
|
+
'inventory.settings_general_desc': 'Wie dieser Workspace seinen Besitz nummeriert.',
|
|
298
968
|
'inventory.settings_numbering': 'Inventarnummern',
|
|
299
969
|
'inventory.settings_numbering_desc':
|
|
300
970
|
'Die Form jeder ab jetzt vergebenen Nummer. Bereits aufgeklebte Nummern bleiben, wie sie sind.',
|
|
@@ -305,20 +975,232 @@ export const de: Record<string, Message> = {
|
|
|
305
975
|
'inventory.settings_pad_hint': 'Auf wie viele Stellen die Zahl mit Nullen aufgefüllt wird.',
|
|
306
976
|
'inventory.settings_pad_invalid': 'Ganze Zahl von 1 bis 10 eingeben',
|
|
307
977
|
'inventory.settings_preview': 'Beispielnummer',
|
|
308
|
-
'inventory.settings_saved': 'Einstellungen
|
|
309
|
-
'inventory.settings_save_error': 'Die Einstellungen konnten nicht gespeichert werden',
|
|
978
|
+
'inventory.settings_saved': 'Einstellungen gespeichert',
|
|
310
979
|
'inventory.settings_error': 'Die Einstellungen konnten nicht geladen werden',
|
|
311
980
|
'inventory.settings_readonly': 'Sie können diese Einstellungen lesen, aber nicht ändern.',
|
|
312
|
-
'inventory.settings_not_enabled': 'Inventar ist in diesem
|
|
981
|
+
'inventory.settings_not_enabled': 'Inventar ist in diesem Workspace nicht aktiviert',
|
|
982
|
+
|
|
983
|
+
'inventory.settings_notices': 'Benachrichtigungen',
|
|
984
|
+
'inventory.settings_notices_desc':
|
|
985
|
+
'Wann dieser Workspace erfährt, dass eine Garantie ausläuft oder ein Gegenstand zu lange in der Werkstatt ist.',
|
|
986
|
+
'inventory.settings_warranty_days': 'So viele Tage vorher warnen',
|
|
987
|
+
'inventory.settings_warranty_days_hint':
|
|
988
|
+
'Wie lange vor Ablauf der Garantie jemand informiert wird. Einmal pro Gegenstand, an die Person, die ihn hat.',
|
|
989
|
+
'inventory.settings_repair_days': 'Nach so vielen Tagen nachfassen',
|
|
990
|
+
'inventory.settings_repair_days_hint':
|
|
991
|
+
'Wie lange ein Gegenstand in der Werkstatt sein darf, bevor die Person, die die Reparatur erfasst hat, nachfassen soll.',
|
|
992
|
+
'inventory.settings_days_invalid': 'Geben Sie eine ganze Zahl zwischen 1 und 365 Tagen ein',
|
|
993
|
+
'inventory.held_by': 'Bei {name}',
|
|
994
|
+
'inventory.held_by_clear': 'Alle Gegenstände anzeigen',
|
|
313
995
|
'inventory.widget_title': 'Neue Gegenstände',
|
|
314
|
-
'inventory.widget_desc': 'Die zuletzt hinzugefügten Gegenstände dieses
|
|
996
|
+
'inventory.widget_desc': 'Die zuletzt hinzugefügten Gegenstände dieses Workspace.',
|
|
997
|
+
|
|
998
|
+
'inventory.category': 'Kategorie',
|
|
999
|
+
'inventory.category_none': 'Ohne Kategorie',
|
|
1000
|
+
'inventory.filter_all_categories': 'Alle Kategorien',
|
|
1001
|
+
'inventory.categories_error': 'Die Kategorien konnten nicht geladen werden',
|
|
1002
|
+
'inventory.settings_categories': 'Kategorien',
|
|
1003
|
+
'inventory.settings_categories_desc': 'Wie dieser Workspace seinen Besitz gruppiert.',
|
|
1004
|
+
'inventory.categories_empty': 'Noch keine Kategorien',
|
|
1005
|
+
'inventory.categories_empty_desc':
|
|
1006
|
+
'Gruppieren Sie, was die Firma besitzt — Laptops, Möbel, Kameras — damit eine lange Liste auf eine Art eingegrenzt werden kann.',
|
|
1007
|
+
'inventory.categories_all_archived': 'Alle Kategorien sind archiviert',
|
|
1008
|
+
'inventory.categories_all_archived_desc':
|
|
1009
|
+
'Zeigen Sie die archivierten an, um eine wiederherzustellen, oder legen Sie eine neue an.',
|
|
1010
|
+
'inventory.category_new': 'Neue Kategorie',
|
|
1011
|
+
'inventory.category_edit': 'Kategorie bearbeiten',
|
|
1012
|
+
'inventory.category_name_placeholder': 'Laptops, Möbel, Kameras…',
|
|
1013
|
+
'inventory.category_reorder_hint':
|
|
1014
|
+
'Ziehen Sie eine Kategorie oder nutzen Sie die Pfeile in ihrer Zeile, um die Reihenfolge zu ändern.',
|
|
1015
|
+
'inventory.category_move_up': '{name} nach oben schieben',
|
|
1016
|
+
'inventory.category_move_down': '{name} nach unten schieben',
|
|
1017
|
+
'inventory.category_position_first': '{name} steht an erster Stelle',
|
|
1018
|
+
'inventory.category_position_last': '{name} steht an letzter Stelle',
|
|
1019
|
+
'inventory.category_position_after': '{name} steht hinter {other}',
|
|
1020
|
+
'inventory.category_created_toast': '{name} hinzugefügt',
|
|
1021
|
+
'inventory.category_updated_toast': '{name} gespeichert',
|
|
1022
|
+
'inventory.category_archived_toast': '{name} archiviert',
|
|
1023
|
+
'inventory.category_restored_toast': '{name} wiederhergestellt',
|
|
1024
|
+
'inventory.category_archive_title': '{name} archivieren?',
|
|
1025
|
+
'inventory.category_archive_body':
|
|
1026
|
+
'Sie verschwindet aus der Auswahl und aus dem Filter. Bereits zugeordnete Gegenstände behalten sie und sagen weiterhin, was sie sind; Sie können sie jederzeit wiederherstellen.',
|
|
1027
|
+
|
|
1028
|
+
// "Ausgabe/Rückgabe" is what a German asset register calls this, and the verbs below follow it.
|
|
1029
|
+
'inventory.custody': 'Ausgabe',
|
|
1030
|
+
'inventory.custody_holder': 'Ausgegeben an',
|
|
1031
|
+
'inventory.custody_nobody': 'Niemand — auf Lager',
|
|
1032
|
+
'inventory.custody_since': 'Ausgegeben seit {date}',
|
|
1033
|
+
'inventory.custody_assign': 'Ausgeben',
|
|
1034
|
+
'inventory.custody_transfer': 'Weitergeben',
|
|
1035
|
+
'inventory.custody_return': 'Zurücknehmen',
|
|
1036
|
+
'inventory.custody_assign_title': '{name} ausgeben',
|
|
1037
|
+
'inventory.custody_transfer_title': '{name} weitergeben',
|
|
1038
|
+
'inventory.custody_return_title': '{name} zurücknehmen?',
|
|
1039
|
+
'inventory.custody_return_body':
|
|
1040
|
+
'Der Gegenstand geht zurück auf Lager, und {person} ist nicht mehr dafür verantwortlich.',
|
|
1041
|
+
'inventory.custody_person': 'Wer ihn bekommt',
|
|
1042
|
+
'inventory.custody_person_none': 'Jemanden auswählen',
|
|
1043
|
+
'inventory.custody_note': 'Notiz',
|
|
1044
|
+
'inventory.custody_note_hint': 'Optional — wohin er geht oder wofür er ist.',
|
|
1045
|
+
'inventory.custody_assigned_toast': '{name} an {person} ausgegeben',
|
|
1046
|
+
'inventory.custody_transferred_toast': '{name} an {person} weitergegeben',
|
|
1047
|
+
'inventory.custody_returned_toast': '{name} zurückgenommen',
|
|
1048
|
+
// Not "Frühere Ausgaben" and "Die Ausgaben konnten nicht geladen werden". *Ausgabe* is the right
|
|
1049
|
+
// verb for handing an item out and the wrong noun to leave standing on its own beside a Preis
|
|
1050
|
+
// field, where it reads as *expenditure* — "Frühere Ausgaben" over a list of people, on a panel
|
|
1051
|
+
// showing what the thing cost, is the one place this bundle's own terminology misleads.
|
|
1052
|
+
'inventory.custody_previous': 'Frühere Inhaber',
|
|
1053
|
+
'inventory.custody_empty': 'Noch niemand hatte diesen Gegenstand',
|
|
1054
|
+
'inventory.custody_empty_desc': 'Geben Sie ihn aus, und die Ausgabe wird hier festgehalten.',
|
|
1055
|
+
'inventory.custody_error': 'Der Ausgabeverlauf konnte nicht geladen werden',
|
|
1056
|
+
'inventory.custody_archived_hint': 'Stellen Sie den Gegenstand wieder her, bevor Sie ihn ausgeben.',
|
|
1057
|
+
'inventory.member_former': 'Ein ehemaliges Mitglied',
|
|
1058
|
+
'inventory.member_system': 'Das System',
|
|
1059
|
+
'inventory.member_loading': '…',
|
|
1060
|
+
'inventory.member_unknown': 'Jemand',
|
|
1061
|
+
|
|
1062
|
+
'inventory.history': 'Verlauf',
|
|
1063
|
+
'inventory.history_empty': 'Mit diesem Gegenstand ist noch nichts geschehen',
|
|
1064
|
+
'inventory.history_error': 'Der Verlauf konnte nicht geladen werden',
|
|
1065
|
+
'inventory.history_created': '{actor} hat ihn angelegt',
|
|
1066
|
+
'inventory.history_updated': '{actor} hat ihn bearbeitet',
|
|
1067
|
+
'inventory.history_assigned': '{actor} hat ihn an {person} ausgegeben',
|
|
1068
|
+
'inventory.history_transferred': '{actor} hat ihn an {person} weitergegeben',
|
|
1069
|
+
'inventory.history_returned': '{actor} hat ihn von {person} zurückgenommen',
|
|
1070
|
+
'inventory.history_retired': '{actor} hat ihn archiviert',
|
|
1071
|
+
'inventory.history_restored': '{actor} hat ihn wiederhergestellt',
|
|
1072
|
+
'inventory.history_unknown': '{actor} hat ihn geändert — {action}',
|
|
1073
|
+
'inventory.history_set': '{field} auf {to} gesetzt',
|
|
1074
|
+
'inventory.history_cleared': '{field} geleert',
|
|
1075
|
+
'inventory.history_changed': '{field} von {from} auf {to} geändert',
|
|
1076
|
+
'inventory.history_replaced': '{field} ersetzt',
|
|
1077
|
+
'inventory.history_text_changed': '{field} geändert',
|
|
1078
|
+
'inventory.history_show_text': 'Text anzeigen',
|
|
1079
|
+
'inventory.history_text_before': 'Vorher',
|
|
1080
|
+
'inventory.history_text_after': 'Nachher',
|
|
1081
|
+
'inventory.history_note': 'Notiz: {note}',
|
|
1082
|
+
'inventory.history_repair_logged': '{actor} hat ihn zur Reparatur gegeben',
|
|
1083
|
+
// "als zurück erfasst" is English word order wearing German words — *zurück* is an adverb and
|
|
1084
|
+
// cannot be what something is erfasst *as*. The noun is what German uses: die Rückkehr erfassen.
|
|
1085
|
+
'inventory.history_repair_completed': '{actor} hat seine Rückkehr erfasst',
|
|
1086
|
+
'inventory.history_attachment_added': '{actor} hat eine Datei angehängt',
|
|
1087
|
+
'inventory.history_attachment_removed': '{actor} hat eine Datei entfernt',
|
|
1088
|
+
|
|
1089
|
+
'inventory.details': 'Details',
|
|
1090
|
+
'inventory.open': 'Öffnen',
|
|
1091
|
+
'inventory.open_asset': '{name} öffnen',
|
|
1092
|
+
'inventory.asset_error': 'Dieser Gegenstand konnte nicht geladen werden',
|
|
1093
|
+
'inventory.added_on': 'Angelegt',
|
|
1094
|
+
'inventory.updated_on': 'Zuletzt geändert',
|
|
1095
|
+
'inventory.photo': 'Foto',
|
|
1096
|
+
|
|
1097
|
+
'inventory.repairs': 'Reparaturen',
|
|
1098
|
+
'inventory.repairs_error': 'Die Reparaturen konnten nicht geladen werden',
|
|
1099
|
+
'inventory.repairs_empty': 'Noch keine Reparatur erfasst',
|
|
1100
|
+
'inventory.repairs_empty_desc':
|
|
1101
|
+
'Geht etwas zur Reparatur, halten Sie es hier fest — dann weiß das Inventar, wo es ist.',
|
|
1102
|
+
'inventory.repair_new': 'Zur Reparatur geben',
|
|
1103
|
+
'inventory.repair_edit': 'Reparatur bearbeiten',
|
|
1104
|
+
'inventory.repair_summary': 'Was ist defekt',
|
|
1105
|
+
'inventory.repair_summary_placeholder': 'Displaybruch, neuer Akku…',
|
|
1106
|
+
'inventory.repair_detail': 'Details',
|
|
1107
|
+
'inventory.repair_vendor': 'Werkstatt',
|
|
1108
|
+
'inventory.repair_vendor_placeholder': 'Wer repariert ihn',
|
|
1109
|
+
'inventory.repair_cost': 'Kosten',
|
|
1110
|
+
'inventory.repair_sent_on': 'Abgegeben',
|
|
1111
|
+
'inventory.repair_returned_on': 'Zurück',
|
|
1112
|
+
'inventory.repair_current': 'In Reparatur',
|
|
1113
|
+
'inventory.repair_past': 'Frühere Reparaturen',
|
|
1114
|
+
'inventory.repair_away_since': 'Seit {date} in Reparatur',
|
|
1115
|
+
'inventory.repair_complete': 'Rückkehr erfassen',
|
|
1116
|
+
'inventory.repair_complete_title': 'Rückkehr von {name} erfassen?',
|
|
1117
|
+
'inventory.repair_complete_body':
|
|
1118
|
+
'Der Gegenstand geht an die Person zurück, die ihn hat — oder ins Lager, wenn ihn niemand hat. Tragen Sie die Kosten ein, sobald die Rechnung da ist.',
|
|
1119
|
+
'inventory.repair_logged_toast': '{name} zur Reparatur gegeben',
|
|
1120
|
+
'inventory.repair_saved_toast': 'Reparatur gespeichert',
|
|
1121
|
+
'inventory.repair_completed_toast': 'Rückkehr von {name} erfasst',
|
|
1122
|
+
'inventory.repair_archived_hint':
|
|
1123
|
+
'Stellen Sie diesen Gegenstand wieder her, bevor Sie ihn zur Reparatur geben.',
|
|
1124
|
+
'inventory.widget_repairs_title': 'In Reparatur',
|
|
1125
|
+
'inventory.widget_repairs_desc': 'Alles, was gerade zur Reparatur unterwegs ist.',
|
|
1126
|
+
'inventory.widget_repairs_empty': 'Nichts ist in Reparatur',
|
|
1127
|
+
|
|
1128
|
+
'inventory.files': 'Dateien',
|
|
1129
|
+
'inventory.files_error': 'Die Dateien konnten nicht geladen werden',
|
|
1130
|
+
'inventory.files_empty': 'Noch keine Dateien',
|
|
1131
|
+
'inventory.files_empty_desc':
|
|
1132
|
+
'Rechnung, Garantiekarte und Handbuch gehören zu dem Gegenstand, für den sie gelten.',
|
|
1133
|
+
'inventory.file_add': 'Datei hinzufügen',
|
|
1134
|
+
'inventory.file_download': '{name} herunterladen',
|
|
1135
|
+
'inventory.file_remove': '{name} entfernen',
|
|
1136
|
+
'inventory.file_remove_title': '{name} entfernen?',
|
|
1137
|
+
'inventory.file_remove_body':
|
|
1138
|
+
'Sie ist dann nicht mehr bei diesem Gegenstand aufgeführt. Die Datei selbst wird nicht gelöscht und bleibt überall dort erhalten, wo sie sonst noch angehängt ist.',
|
|
1139
|
+
'inventory.file_removed_toast': '{name} entfernt',
|
|
1140
|
+
'inventory.file_added_toast': { one: '{n} Datei hinzugefügt', other: '{n} Dateien hinzugefügt' },
|
|
1141
|
+
'inventory.file_upload_failed': '{name} konnte nicht hochgeladen werden',
|
|
1142
|
+
'inventory.file_unnamed': 'Hochgeladene Datei',
|
|
1143
|
+
|
|
1144
|
+
'inventory.photo_none': 'Noch kein Foto',
|
|
1145
|
+
'inventory.photo_set': 'Foto auswählen',
|
|
1146
|
+
'inventory.photo_replace': 'Foto ersetzen',
|
|
1147
|
+
'inventory.photo_remove': 'Foto entfernen',
|
|
1148
|
+
'inventory.photo_saved_toast': 'Foto gespeichert',
|
|
1149
|
+
'inventory.photo_removed_toast': 'Foto entfernt',
|
|
1150
|
+
'inventory.photo_alt': 'Foto von {name}',
|
|
1151
|
+
|
|
1152
|
+
'inventory.stats_total': 'Gegenstände',
|
|
1153
|
+
'inventory.stats_unassigned': 'Niemandem zugeordnet',
|
|
1154
|
+
'inventory.stats_out_for_repair': 'In Reparatur',
|
|
1155
|
+
|
|
1156
|
+
// "Neu laden" is what the shell calls Reload (`pwa_update_reload`), so these use its verb.
|
|
1157
|
+
'inventory.error_custody_conflict':
|
|
1158
|
+
'Kurz vor Ihnen hat jemand geändert, wer den Gegenstand hat. Laden Sie die Seite neu, um zu sehen, wo er jetzt ist.',
|
|
1159
|
+
'inventory.error_custody_archived':
|
|
1160
|
+
'Dieser Gegenstand ist archiviert. Stellen Sie ihn wieder her, bevor Sie ihn ausgeben.',
|
|
1161
|
+
'inventory.error_custody_already_held':
|
|
1162
|
+
'Der Gegenstand ist bereits ausgegeben. Geben Sie ihn weiter, oder nehmen Sie ihn erst zurück.',
|
|
1163
|
+
'inventory.error_custody_not_held':
|
|
1164
|
+
'Den Gegenstand hat niemand, es gibt also nichts weiterzugeben. Geben Sie ihn stattdessen aus.',
|
|
1165
|
+
'inventory.error_asset_still_held':
|
|
1166
|
+
'Der Gegenstand ist noch ausgegeben. Nehmen Sie ihn zurück, bevor Sie ihn archivieren.',
|
|
1167
|
+
'inventory.error_asset_under_repair':
|
|
1168
|
+
'Der Gegenstand ist in Reparatur. Erfassen Sie seine Rückkehr, bevor Sie ihn archivieren.',
|
|
1169
|
+
'inventory.error_repair_already_open':
|
|
1170
|
+
'Der Gegenstand ist bereits in Reparatur. Erfassen Sie zuerst deren Rückkehr.',
|
|
1171
|
+
'inventory.error_repair_archived':
|
|
1172
|
+
'Dieser Gegenstand ist archiviert. Stellen Sie ihn wieder her, bevor Sie ihn zur Reparatur geben.',
|
|
1173
|
+
'inventory.error_repair_already_complete': 'Diese Reparatur ist bereits als abgeschlossen erfasst.',
|
|
1174
|
+
'inventory.error_repair_returned_before_sent':
|
|
1175
|
+
'Eine Reparatur kann nicht vor der Abgabe zurückkommen. Prüfen Sie die beiden Daten.',
|
|
1176
|
+
'inventory.error_category_name_taken':
|
|
1177
|
+
'In diesem Workspace gibt es bereits eine Kategorie mit diesem Namen.',
|
|
1178
|
+
'inventory.error_category_order_stale':
|
|
1179
|
+
'Jemand anderes hat die Kategorien geändert, während diese Seite offen war — diese Reihenfolge wurde nicht gespeichert. Die Liste unten ist wieder aktuell; ordnen Sie sie erneut.',
|
|
1180
|
+
'inventory.error_category_limit_reached':
|
|
1181
|
+
'Ein Workspace kann {max} Kategorien gleichzeitig führen, und dieser hat sie alle. Archivieren Sie eine, die nicht mehr gebraucht wird, um Platz zu schaffen.',
|
|
1182
|
+
'inventory.error_not_found':
|
|
1183
|
+
'Das ist nicht mehr da. Vielleicht hat es jemand entfernt oder archiviert — laden Sie die Seite neu.',
|
|
1184
|
+
'inventory.error_forbidden': 'Dazu sind Sie nicht berechtigt.',
|
|
1185
|
+
'inventory.error_module_disabled': 'Inventar ist in diesem Workspace abgeschaltet.',
|
|
1186
|
+
'inventory.error_conflict':
|
|
1187
|
+
'Kurz vor Ihnen hat jemand das geändert. Laden Sie die Seite neu und versuchen Sie es erneut.',
|
|
1188
|
+
'inventory.error_bad_request': 'Etwas im Formular wurde nicht akzeptiert. Prüfen Sie Ihre Eingaben.',
|
|
1189
|
+
'inventory.error_refused': 'Das wurde nicht akzeptiert.',
|
|
1190
|
+
'inventory.error_unauthorized': 'Ihre Sitzung ist abgelaufen. Melden Sie sich erneut an.',
|
|
1191
|
+
'inventory.error_rate_limited':
|
|
1192
|
+
'Gerade zu viele Anfragen. Warten Sie einen Moment und versuchen Sie es erneut.',
|
|
1193
|
+
'inventory.error_unavailable': 'Der Server antwortet gerade nicht. Versuchen Sie es gleich noch einmal.',
|
|
1194
|
+
'inventory.error_unknown': 'Das hat nicht funktioniert.',
|
|
315
1195
|
}
|
|
316
1196
|
|
|
317
1197
|
export const tr: Record<string, Message> = {
|
|
318
1198
|
'inventory.nav': 'Envanter',
|
|
319
1199
|
'inventory.title': 'Demirbaşlar',
|
|
320
1200
|
'inventory.empty': 'Henüz demirbaş yok',
|
|
321
|
-
|
|
1201
|
+
// "— şirkete ait her şeyi" left an accusative object hanging off a sentence that already had
|
|
1202
|
+
// one. "ne varsa" is how Turkish finishes the thought.
|
|
1203
|
+
'inventory.empty_desc': 'İlk dizüstünü, telefonu ya da masayı ekleyin — şirkete ait ne varsa.',
|
|
322
1204
|
'inventory.new': 'Yeni demirbaş',
|
|
323
1205
|
'inventory.edit': 'Demirbaşı düzenle',
|
|
324
1206
|
'inventory.code': 'Demirbaş no',
|
|
@@ -349,16 +1231,23 @@ export const tr: Record<string, Message> = {
|
|
|
349
1231
|
'inventory.archived': 'Arşivlenmiş',
|
|
350
1232
|
// Not "Geri al": tr.json already spends that on *undo* and *revoke* (`undo`, `dash_undo`,
|
|
351
1233
|
// `invite_revoke`), so the same two words in a row menu would read as "undo" beside "Arşivle".
|
|
352
|
-
|
|
1234
|
+
// "Geri getir" rather than "Geri yükle", for two reasons that point the same way. Kern already
|
|
1235
|
+
// has a Turkish word for un-archiving something — `ws_archive_hint` and
|
|
1236
|
+
// `ws_archive_confirm_body` both say "geri getir" about an archived workspace — and a module
|
|
1237
|
+
// that invents a second one leaves the product saying two things for one action. And "yükle" is
|
|
1238
|
+
// already carrying *reload* ("sayfayı yeniden yükleyin") and *load more* ("Daha fazla yükle")
|
|
1239
|
+
// in this very bundle; a third sense of the same verb, three lines apart, is a bundle nobody
|
|
1240
|
+
// can read quickly.
|
|
1241
|
+
'inventory.restore': 'Geri getir',
|
|
353
1242
|
'inventory.show_archived': 'Arşivlenmişleri göster',
|
|
354
1243
|
// The shell's own catalogue says "Daha fazla yükle" for this English string (`audit_load_more`).
|
|
355
1244
|
'inventory.load_more': 'Daha fazla yükle',
|
|
356
1245
|
'inventory.row_actions': '{name} için işlemler',
|
|
357
1246
|
'inventory.archive_title': '{name} arşivlensin mi?',
|
|
358
1247
|
'inventory.archive_body':
|
|
359
|
-
'Listeden çıkar ve numarasını korur. Hiçbir şey silinmez, istediğiniz zaman geri
|
|
1248
|
+
'Listeden çıkar ve numarasını korur. Hiçbir şey silinmez, istediğiniz zaman geri getirebilirsiniz.',
|
|
360
1249
|
'inventory.archived_toast': '{name} arşivlendi',
|
|
361
|
-
'inventory.restored_toast': '{name} geri
|
|
1250
|
+
'inventory.restored_toast': '{name} geri getirildi',
|
|
362
1251
|
'inventory.created_toast': '{name} eklendi',
|
|
363
1252
|
'inventory.updated_toast': '{name} güncellendi',
|
|
364
1253
|
'inventory.load_error': 'Demirbaşlar yüklenemedi',
|
|
@@ -377,13 +1266,212 @@ export const tr: Record<string, Message> = {
|
|
|
377
1266
|
'inventory.settings_pad_hint': 'Sayının kaç basamağa kadar sıfırla tamamlanacağı.',
|
|
378
1267
|
'inventory.settings_pad_invalid': '1 ile 10 arasında bir tam sayı girin',
|
|
379
1268
|
'inventory.settings_preview': 'Örnek numara',
|
|
380
|
-
'inventory.settings_saved': '
|
|
381
|
-
'inventory.settings_save_error': 'Ayarlar kaydedilemedi',
|
|
1269
|
+
'inventory.settings_saved': 'Ayarlar kaydedildi',
|
|
382
1270
|
'inventory.settings_error': 'Ayarlar yüklenemedi',
|
|
383
1271
|
'inventory.settings_readonly': 'Bu ayarları görebilir ama değiştiremezsiniz.',
|
|
384
1272
|
'inventory.settings_not_enabled': 'Envanter bu çalışma alanında etkin değil',
|
|
1273
|
+
|
|
1274
|
+
'inventory.settings_notices': 'Bildirimler',
|
|
1275
|
+
'inventory.settings_notices_desc':
|
|
1276
|
+
'Bu çalışma alanına bir garantinin bitmek üzere olduğunun ya da bir demirbaşın serviste fazla kaldığının ne zaman söyleneceği.',
|
|
1277
|
+
'inventory.settings_warranty_days': 'Kaç gün önceden uyarılsın',
|
|
1278
|
+
'inventory.settings_warranty_days_hint':
|
|
1279
|
+
'Garanti bitmeden ne kadar önce haber verileceği. Her demirbaş için bir kez, onu elinde tutan kişiye.',
|
|
1280
|
+
'inventory.settings_repair_days': 'Kaç gün sonra onarım sorulsun',
|
|
1281
|
+
'inventory.settings_repair_days_hint':
|
|
1282
|
+
'Bir demirbaşın serviste ne kadar kalabileceği; sonrasında onarımı kaydeden kişiden takip etmesi istenir.',
|
|
1283
|
+
'inventory.settings_days_invalid': '1 ile 365 arasında tam bir gün sayısı girin',
|
|
1284
|
+
'inventory.held_by': '{name} kişisinde',
|
|
1285
|
+
'inventory.held_by_clear': 'Tüm demirbaşları göster',
|
|
385
1286
|
'inventory.widget_title': 'Son eklenenler',
|
|
386
1287
|
'inventory.widget_desc': 'Bu çalışma alanına en son eklenen demirbaşlar.',
|
|
1288
|
+
|
|
1289
|
+
'inventory.category': 'Kategori',
|
|
1290
|
+
'inventory.category_none': 'Kategorisiz',
|
|
1291
|
+
'inventory.filter_all_categories': 'Tüm kategoriler',
|
|
1292
|
+
'inventory.categories_error': 'Kategoriler yüklenemedi',
|
|
1293
|
+
'inventory.settings_categories': 'Kategoriler',
|
|
1294
|
+
'inventory.settings_categories_desc': 'Bu çalışma alanının sahip olduklarını nasıl grupladığı.',
|
|
1295
|
+
'inventory.categories_empty': 'Henüz kategori yok',
|
|
1296
|
+
'inventory.categories_empty_desc':
|
|
1297
|
+
'Şirkete ait olanları gruplayın — dizüstüler, mobilya, kameralar — böylece uzun bir liste tek bir türe daraltılabilir.',
|
|
1298
|
+
'inventory.categories_all_archived': 'Bütün kategoriler arşivlenmiş',
|
|
1299
|
+
'inventory.categories_all_archived_desc':
|
|
1300
|
+
'Birini geri getirmek için arşivlenmişleri gösterin ya da yeni bir kategori ekleyin.',
|
|
1301
|
+
'inventory.category_new': 'Yeni kategori',
|
|
1302
|
+
'inventory.category_edit': 'Kategoriyi düzenle',
|
|
1303
|
+
'inventory.category_name_placeholder': 'Dizüstüler, Mobilya, Kameralar…',
|
|
1304
|
+
'inventory.category_reorder_hint':
|
|
1305
|
+
'Görünme sırasını değiştirmek için bir kategoriyi sürükleyin ya da satırındaki okları kullanın.',
|
|
1306
|
+
'inventory.category_move_up': '{name} kategorisini yukarı taşı',
|
|
1307
|
+
'inventory.category_move_down': '{name} kategorisini aşağı taşı',
|
|
1308
|
+
'inventory.category_position_first': '{name} ilk sırada',
|
|
1309
|
+
'inventory.category_position_last': '{name} son sırada',
|
|
1310
|
+
'inventory.category_position_after': '{name}, {other} kategorisinden sonra',
|
|
1311
|
+
'inventory.category_created_toast': '{name} eklendi',
|
|
1312
|
+
'inventory.category_updated_toast': '{name} kaydedildi',
|
|
1313
|
+
'inventory.category_archived_toast': '{name} arşivlendi',
|
|
1314
|
+
'inventory.category_restored_toast': '{name} geri getirildi',
|
|
1315
|
+
'inventory.category_archive_title': '{name} arşivlensin mi?',
|
|
1316
|
+
'inventory.category_archive_body':
|
|
1317
|
+
'Seçim listesinden ve filtreden çıkar. Bu kategoriye girilmiş demirbaşlar kategorilerini korur ve ne olduklarını söylemeye devam eder; istediğiniz zaman geri getirebilirsiniz.',
|
|
1318
|
+
|
|
1319
|
+
'inventory.custody': 'Zimmet',
|
|
1320
|
+
'inventory.custody_holder': 'Kimde',
|
|
1321
|
+
'inventory.custody_nobody': 'Kimsede değil — depoda',
|
|
1322
|
+
'inventory.custody_since': '{date} tarihinden beri zimmetli',
|
|
1323
|
+
'inventory.custody_assign': 'Zimmetle',
|
|
1324
|
+
'inventory.custody_transfer': 'Devret',
|
|
1325
|
+
// Not "Geri al": tr already spends that on *undo* and *revoke*, and this button sits two rows
|
|
1326
|
+
// away from "Arşivle" in the same menu.
|
|
1327
|
+
'inventory.custody_return': 'Teslim al',
|
|
1328
|
+
'inventory.custody_assign_title': '{name} zimmetle',
|
|
1329
|
+
'inventory.custody_transfer_title': '{name} devret',
|
|
1330
|
+
'inventory.custody_return_title': '{name} teslim alınsın mı?',
|
|
1331
|
+
'inventory.custody_return_body': 'Depoya döner ve {person} artık ondan sorumlu olmaz.',
|
|
1332
|
+
'inventory.custody_person': 'Kime veriliyor',
|
|
1333
|
+
'inventory.custody_person_none': 'Birini seçin',
|
|
1334
|
+
'inventory.custody_note': 'Not',
|
|
1335
|
+
'inventory.custody_note_hint': 'İsteğe bağlı — nereye gittiği ya da ne için olduğu.',
|
|
1336
|
+
'inventory.custody_assigned_toast': '{name}, {person} kişisine zimmetlendi',
|
|
1337
|
+
'inventory.custody_transferred_toast': '{name}, {person} kişisine devredildi',
|
|
1338
|
+
'inventory.custody_returned_toast': '{name} teslim alındı',
|
|
1339
|
+
'inventory.custody_previous': 'Önceki zimmetler',
|
|
1340
|
+
'inventory.custody_empty': 'Bu demirbaş henüz kimseye zimmetlenmedi',
|
|
1341
|
+
'inventory.custody_empty_desc': 'Birine zimmetleyin, devir burada kaydedilsin.',
|
|
1342
|
+
'inventory.custody_error': 'Zimmet kaydı yüklenemedi',
|
|
1343
|
+
'inventory.custody_archived_hint': 'Zimmetlemeden önce bu demirbaşı arşivden geri getirin.',
|
|
1344
|
+
'inventory.member_former': 'Ayrılmış bir üye',
|
|
1345
|
+
'inventory.member_system': 'Sistem',
|
|
1346
|
+
'inventory.member_loading': '…',
|
|
1347
|
+
'inventory.member_unknown': 'Biri',
|
|
1348
|
+
|
|
1349
|
+
'inventory.history': 'Geçmiş',
|
|
1350
|
+
'inventory.history_empty': 'Bu demirbaşla ilgili henüz bir şey olmadı',
|
|
1351
|
+
'inventory.history_error': 'Geçmiş yüklenemedi',
|
|
1352
|
+
'inventory.history_created': '{actor} ekledi',
|
|
1353
|
+
'inventory.history_updated': '{actor} düzenledi',
|
|
1354
|
+
'inventory.history_assigned': '{actor}, {person} kişisine zimmetledi',
|
|
1355
|
+
'inventory.history_transferred': '{actor}, {person} kişisine devretti',
|
|
1356
|
+
'inventory.history_returned': '{actor}, {person} kişisinden teslim aldı',
|
|
1357
|
+
'inventory.history_retired': '{actor} arşivledi',
|
|
1358
|
+
'inventory.history_restored': '{actor} geri getirdi',
|
|
1359
|
+
'inventory.history_unknown': '{actor} değiştirdi — {action}',
|
|
1360
|
+
'inventory.history_set': '{field} {to} olarak ayarlandı',
|
|
1361
|
+
'inventory.history_cleared': '{field} temizlendi',
|
|
1362
|
+
'inventory.history_changed': '{field} {from} değerinden {to} değerine değişti',
|
|
1363
|
+
'inventory.history_replaced': '{field} değiştirildi',
|
|
1364
|
+
'inventory.history_text_changed': '{field} değişti',
|
|
1365
|
+
'inventory.history_show_text': 'Metni göster',
|
|
1366
|
+
'inventory.history_text_before': 'Öncesi',
|
|
1367
|
+
'inventory.history_text_after': 'Sonrası',
|
|
1368
|
+
'inventory.history_note': 'Not: {note}',
|
|
1369
|
+
'inventory.history_repair_logged': '{actor} onarıma gönderdi',
|
|
1370
|
+
'inventory.history_repair_completed': '{actor} onarımdan döndü olarak kaydetti',
|
|
1371
|
+
'inventory.history_attachment_added': '{actor} bir dosya ekledi',
|
|
1372
|
+
'inventory.history_attachment_removed': '{actor} bir dosyayı kaldırdı',
|
|
1373
|
+
|
|
1374
|
+
'inventory.details': 'Ayrıntılar',
|
|
1375
|
+
'inventory.open': 'Aç',
|
|
1376
|
+
'inventory.open_asset': '{name} öğesini aç',
|
|
1377
|
+
'inventory.asset_error': 'Bu demirbaş yüklenemedi',
|
|
1378
|
+
'inventory.added_on': 'Eklendi',
|
|
1379
|
+
'inventory.updated_on': 'Son değişiklik',
|
|
1380
|
+
'inventory.photo': 'Fotoğraf',
|
|
1381
|
+
|
|
1382
|
+
'inventory.repairs': 'Onarımlar',
|
|
1383
|
+
'inventory.repairs_error': 'Onarımlar yüklenemedi',
|
|
1384
|
+
'inventory.repairs_empty': 'Henüz onarım kaydı yok',
|
|
1385
|
+
'inventory.repairs_empty_desc':
|
|
1386
|
+
'Bir şey onarıma gittiğinde buraya kaydedin ki envanter nerede olduğunu söyleyebilsin.',
|
|
1387
|
+
'inventory.repair_new': 'Onarıma gönder',
|
|
1388
|
+
'inventory.repair_edit': 'Onarımı düzenle',
|
|
1389
|
+
'inventory.repair_summary': 'Sorun ne',
|
|
1390
|
+
'inventory.repair_summary_placeholder': 'Kırık ekran, yeni pil…',
|
|
1391
|
+
'inventory.repair_detail': 'Ayrıntılar',
|
|
1392
|
+
// "Servis", not "Onaran". This bundle's own settings hints already call the place *servis*
|
|
1393
|
+
// ("serviste fazla kaldığının", "serviste ne kadar kalabileceği"), and *servis* is the everyday
|
|
1394
|
+
// Turkish word for a repair shop where "Onaran" is a participle nobody puts on a form.
|
|
1395
|
+
'inventory.repair_vendor': 'Servis',
|
|
1396
|
+
'inventory.repair_vendor_placeholder': 'Onarımı kim yapıyor',
|
|
1397
|
+
'inventory.repair_cost': 'Maliyet',
|
|
1398
|
+
'inventory.repair_sent_on': 'Gönderildi',
|
|
1399
|
+
'inventory.repair_returned_on': 'Döndü',
|
|
1400
|
+
'inventory.repair_current': 'Onarımda',
|
|
1401
|
+
'inventory.repair_past': 'Geçmiş onarımlar',
|
|
1402
|
+
'inventory.repair_away_since': '{date} tarihinden beri onarımda',
|
|
1403
|
+
'inventory.repair_complete': 'Döndü olarak kaydet',
|
|
1404
|
+
'inventory.repair_complete_title': '{name} döndü olarak kaydedilsin mi?',
|
|
1405
|
+
'inventory.repair_complete_body':
|
|
1406
|
+
'Elinde tutan kişiye geri döner, kimse tutmuyorsa depoya girer. Fatura geldiyse maliyeti de yazın.',
|
|
1407
|
+
'inventory.repair_logged_toast': '{name} onarıma gönderildi',
|
|
1408
|
+
'inventory.repair_saved_toast': 'Onarım kaydedildi',
|
|
1409
|
+
'inventory.repair_completed_toast': '{name} döndü olarak kaydedildi',
|
|
1410
|
+
'inventory.repair_archived_hint': 'Onarıma göndermeden önce bu demirbaşı arşivden geri getirin.',
|
|
1411
|
+
'inventory.widget_repairs_title': 'Onarımda',
|
|
1412
|
+
'inventory.widget_repairs_desc': 'Şu anda onarımda olan her şey.',
|
|
1413
|
+
'inventory.widget_repairs_empty': 'Onarımda bir şey yok',
|
|
1414
|
+
|
|
1415
|
+
'inventory.files': 'Dosyalar',
|
|
1416
|
+
'inventory.files_error': 'Dosyalar yüklenemedi',
|
|
1417
|
+
'inventory.files_empty': 'Henüz dosya yok',
|
|
1418
|
+
'inventory.files_empty_desc':
|
|
1419
|
+
'Faturayı, garanti belgesini ve kullanım kılavuzunu ait oldukları demirbaşla birlikte tutun.',
|
|
1420
|
+
'inventory.file_add': 'Dosya ekle',
|
|
1421
|
+
'inventory.file_download': '{name} dosyasını indir',
|
|
1422
|
+
'inventory.file_remove': '{name} dosyasını kaldır',
|
|
1423
|
+
'inventory.file_remove_title': '{name} kaldırılsın mı?',
|
|
1424
|
+
'inventory.file_remove_body':
|
|
1425
|
+
'Bu demirbaşın altında listelenmez. Dosyanın kendisi silinmez; başka bir yere eklenmişse orada kalır.',
|
|
1426
|
+
'inventory.file_removed_toast': '{name} kaldırıldı',
|
|
1427
|
+
'inventory.file_added_toast': { one: '{n} dosya eklendi', other: '{n} dosya eklendi' },
|
|
1428
|
+
'inventory.file_upload_failed': '{name} yüklenemedi',
|
|
1429
|
+
'inventory.file_unnamed': 'Yüklenen dosya',
|
|
1430
|
+
|
|
1431
|
+
'inventory.photo_none': 'Henüz fotoğraf yok',
|
|
1432
|
+
'inventory.photo_set': 'Fotoğraf seç',
|
|
1433
|
+
'inventory.photo_replace': 'Fotoğrafı değiştir',
|
|
1434
|
+
'inventory.photo_remove': 'Fotoğrafı kaldır',
|
|
1435
|
+
'inventory.photo_saved_toast': 'Fotoğraf kaydedildi',
|
|
1436
|
+
'inventory.photo_removed_toast': 'Fotoğraf kaldırıldı',
|
|
1437
|
+
'inventory.photo_alt': '{name} fotoğrafı',
|
|
1438
|
+
|
|
1439
|
+
'inventory.stats_total': 'Demirbaşlar',
|
|
1440
|
+
'inventory.stats_unassigned': 'Kimsede değil',
|
|
1441
|
+
'inventory.stats_out_for_repair': 'Onarımda',
|
|
1442
|
+
|
|
1443
|
+
// "Yeniden yükle" is what the shell calls Reload (`pwa_update_reload`), so these use its verb.
|
|
1444
|
+
'inventory.error_custody_conflict':
|
|
1445
|
+
'Bu demirbaşın kimde olduğunu sizden hemen önce başkası değiştirdi. Şimdi nerede olduğunu görmek için sayfayı yeniden yükleyin.',
|
|
1446
|
+
'inventory.error_custody_archived': 'Bu demirbaş arşivlenmiş. Zimmetlemeden önce arşivden geri getirin.',
|
|
1447
|
+
'inventory.error_custody_already_held': 'Bu demirbaş şu anda birinde. Devredin, ya da önce teslim alın.',
|
|
1448
|
+
'inventory.error_custody_not_held':
|
|
1449
|
+
'Bu demirbaş kimsede değil, devredilecek bir şey yok. Bunun yerine zimmetleyin.',
|
|
1450
|
+
'inventory.error_asset_still_held': 'Bu demirbaş hâlâ birinde. Arşivlemeden önce teslim alın.',
|
|
1451
|
+
'inventory.error_asset_under_repair': 'Bu demirbaş onarımda. Arşivlemeden önce döndü olarak kaydedin.',
|
|
1452
|
+
'inventory.error_repair_already_open': 'Bu demirbaş zaten onarımda. Önce o onarımı döndü olarak kaydedin.',
|
|
1453
|
+
'inventory.error_repair_archived':
|
|
1454
|
+
'Bu demirbaş arşivlenmiş. Onarıma göndermeden önce arşivden geri getirin.',
|
|
1455
|
+
'inventory.error_repair_already_complete': 'Bu onarım zaten tamamlandı olarak kaydedilmiş.',
|
|
1456
|
+
'inventory.error_repair_returned_before_sent':
|
|
1457
|
+
'Bir onarım gönderilmeden önce dönemez. İki tarihi kontrol edin.',
|
|
1458
|
+
'inventory.error_category_name_taken': 'Bu çalışma alanında bu adda bir kategori zaten var.',
|
|
1459
|
+
'inventory.error_category_order_stale':
|
|
1460
|
+
'Bu sayfa açıkken başkası kategorileri değiştirdi, bu yüzden bu sıralama kaydedilmedi. Aşağıdaki liste yenilendi — sırayı yeniden verin.',
|
|
1461
|
+
'inventory.error_category_limit_reached':
|
|
1462
|
+
'Bir çalışma alanı aynı anda {max} kategori tutabilir ve bu alanda hepsi dolu. Yer açmak için artık kullanılmayan bir kategoriyi arşivleyin.',
|
|
1463
|
+
'inventory.error_not_found':
|
|
1464
|
+
'O artık orada değil. Biri kaldırmış ya da arşivlemiş olabilir — sayfayı yeniden yükleyin.',
|
|
1465
|
+
'inventory.error_forbidden': 'Bunu yapma yetkiniz yok.',
|
|
1466
|
+
'inventory.error_module_disabled': 'Envanter bu çalışma alanında kapalı.',
|
|
1467
|
+
'inventory.error_conflict':
|
|
1468
|
+
'Bunu sizden hemen önce başkası değiştirdi. Sayfayı yeniden yükleyip tekrar deneyin.',
|
|
1469
|
+
'inventory.error_bad_request': 'Formdaki bir şey kabul edilmedi. Girdiklerinizi kontrol edin.',
|
|
1470
|
+
'inventory.error_refused': 'Bu istek kabul edilmedi.',
|
|
1471
|
+
'inventory.error_unauthorized': 'Oturumunuz sona erdi. Yeniden giriş yapın.',
|
|
1472
|
+
'inventory.error_rate_limited': 'Şu an çok fazla istek var. Biraz bekleyip tekrar deneyin.',
|
|
1473
|
+
'inventory.error_unavailable': 'Sunucu şu anda yanıt vermiyor. Birazdan tekrar deneyin.',
|
|
1474
|
+
'inventory.error_unknown': 'Bu işlem gerçekleşmedi.',
|
|
387
1475
|
}
|
|
388
1476
|
|
|
389
1477
|
/**
|