sgerp-frontend-lib 0.1.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/index.d.ts +7 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8 -0
  6. package/dist/locales/locale_en.d.ts +2 -0
  7. package/dist/locales/locale_en.d.ts.map +1 -0
  8. package/dist/locales/locale_en.js +1933 -0
  9. package/dist/locales/locale_ja.d.ts +2 -0
  10. package/dist/locales/locale_ja.d.ts.map +1 -0
  11. package/dist/locales/locale_ja.js +1926 -0
  12. package/dist/locales/locale_ms.d.ts +2 -0
  13. package/dist/locales/locale_ms.d.ts.map +1 -0
  14. package/dist/locales/locale_ms.js +1916 -0
  15. package/dist/sgerp/client.d.ts +236 -0
  16. package/dist/sgerp/client.d.ts.map +1 -0
  17. package/dist/sgerp/collections/simulation/node.d.ts +11 -0
  18. package/dist/sgerp/collections/simulation/node.d.ts.map +1 -0
  19. package/dist/sgerp/collections/simulation/vehicle.d.ts +11 -0
  20. package/dist/sgerp/collections/simulation/vehicle.d.ts.map +1 -0
  21. package/dist/sgerp/context/sgerp-context.d.ts +54 -0
  22. package/dist/sgerp/context/sgerp-context.d.ts.map +1 -0
  23. package/dist/sgerp/hooks/use-collection.d.ts +83 -0
  24. package/dist/sgerp/hooks/use-collection.d.ts.map +1 -0
  25. package/dist/sgerp/hooks/use-live-updates.d.ts +35 -0
  26. package/dist/sgerp/hooks/use-live-updates.d.ts.map +1 -0
  27. package/dist/sgerp/hooks/use-live-updates.js +95 -0
  28. package/dist/sgerp/index.d.ts +90 -0
  29. package/dist/sgerp/index.d.ts.map +1 -0
  30. package/dist/sgerp/simulation-logic/fetchUtils.d.ts +69 -0
  31. package/dist/sgerp/simulation-logic/fetchUtils.d.ts.map +1 -0
  32. package/dist/sgerp/simulation-logic/index.d.ts +14 -0
  33. package/dist/sgerp/simulation-logic/index.d.ts.map +1 -0
  34. package/dist/sgerp/simulation-logic/index.js +11 -0
  35. package/dist/sgerp/simulation-logic/manualEditUtils.d.ts +70 -0
  36. package/dist/sgerp/simulation-logic/manualEditUtils.d.ts.map +1 -0
  37. package/dist/sgerp/simulation-logic/mapUtils.d.ts +11 -0
  38. package/dist/sgerp/simulation-logic/mapUtils.d.ts.map +1 -0
  39. package/dist/sgerp/simulation-logic/optimisticUpdateUtils.d.ts +28 -0
  40. package/dist/sgerp/simulation-logic/optimisticUpdateUtils.d.ts.map +1 -0
  41. package/dist/sgerp/simulation-logic/optimisticUpdateUtils.js +37 -0
  42. package/dist/sgerp/simulation-logic/referenceUtils.d.ts +28 -0
  43. package/dist/sgerp/simulation-logic/referenceUtils.d.ts.map +1 -0
  44. package/dist/sgerp/simulation-logic/routeCalculationUtils.d.ts +12 -0
  45. package/dist/sgerp/simulation-logic/routeCalculationUtils.d.ts.map +1 -0
  46. package/dist/sgerp/simulation-logic/timeShiftUtils.d.ts +27 -0
  47. package/dist/sgerp/simulation-logic/timeShiftUtils.d.ts.map +1 -0
  48. package/dist/sgerp/types/simulation/node.d.ts +102 -0
  49. package/dist/sgerp/types/simulation/node.d.ts.map +1 -0
  50. package/dist/sgerp/types/simulation/node.js +11 -0
  51. package/dist/sgerp/types/simulation/vehicle.d.ts +88 -0
  52. package/dist/sgerp/types/simulation/vehicle.d.ts.map +1 -0
  53. package/dist/sgerp/types/simulation/vehicle.js +1 -0
  54. package/dist/sgerp/utils/routeUtils.d.ts +47 -0
  55. package/dist/sgerp/utils/routeUtils.d.ts.map +1 -0
  56. package/package.json +126 -0
@@ -0,0 +1,1916 @@
1
+ export const translations = {
2
+ // SGERP Login
3
+ "sgerp_login.username": "Nama Pengguna",
4
+ "sgerp_login.password": "Kata Laluan",
5
+ "sgerp_login.backend": "Pelayan",
6
+ "sgerp_login.username_placeholder": "Masukkan nama pengguna",
7
+ "sgerp_login.password_placeholder": "Masukkan kata laluan",
8
+ "sgerp_login.backend_placeholder": "Pilih pelayan",
9
+ "sgerp_login.connect_button": "Sambung",
10
+ "sgerp_login.connecting_button": "Menyambung...",
11
+ "sgerp_login.error_fill_fields": "Sila isi semua medan",
12
+ "sgerp_login.error_auth_failed": "Pengesahan gagal",
13
+ "sgerp_login.error_failed_connect": "Gagal menyambung",
14
+ "sgerp_login.success_connected": "Berjaya disambungkan!",
15
+ "sgerp_login.backend_localhost": "Localhost",
16
+ "sgerp_login.backend_staging": "Staging",
17
+ "sgerp_login.backend_production": "Production",
18
+ // Environment Labels
19
+ "env.staging": "Staging",
20
+ "env.production": "Production",
21
+ "env.tcp": "TCP",
22
+ "env.ppe": "PPE",
23
+ // SGERP Autocomplete
24
+ "sgerp_autocomplete.no_results": "Tiada keputusan ditemui",
25
+ "sgerp_autocomplete.loading": "Memuatkan...",
26
+ "sgerp_autocomplete.select_first": "Pilih projek terlebih dahulu",
27
+ "sgerp_autocomplete.placeholder": "Cari...",
28
+ "sgerp_autocomplete.placeholder_project": "Cari projek...",
29
+ "sgerp_autocomplete.placeholder_user": "Cari pengguna...",
30
+ "sgerp_autocomplete.placeholder_simulation": "Cari simulasi...",
31
+ "sgerp_autocomplete.placeholder_vehicle": "Cari kenderaan...",
32
+ "sgerp_autocomplete.placeholder_vehicletype": "Cari jenis kenderaan...",
33
+ "sgerp_autocomplete.placeholder_booking": "Cari tempahan...",
34
+ "sgerp_autocomplete.placeholder_node": "Cari nod...",
35
+ "sgerp_autocomplete.placeholder_projectmember": "Cari ahli projek...",
36
+ "sgerp_autocomplete.placeholder_passenger": "Cari penumpang...",
37
+ "sgerp_autocomplete.search_by_name": "Cari dengan nama...",
38
+ "sgerp_autocomplete.placeholder_template": "Pilih templat...",
39
+ // Navbar
40
+ "navbar.documentation": "Dokumentasi",
41
+ "navbar.try_it_out": "Cuba Sekarang",
42
+ // Docs Navigation
43
+ "docs.nav.getting_started": "Bermula",
44
+ "docs.nav.guides": "Panduan",
45
+ "docs.nav.components": "Komponen",
46
+ "docs.nav.example_apps": "Aplikasi Contoh",
47
+ "docs.nav.pages_for_apps": "Halaman untuk Aplikasi",
48
+ "docs.nav.predefined_tables": "Jadual Pratakrif",
49
+ "docs.nav.editors": "Editor",
50
+ "docs.nav.api_reference": "Rujukan API",
51
+ "docs.nav.try_it_out": "Cuba Sekarang",
52
+ "docs.nav.installation": "Pemasangan",
53
+ "docs.nav.configuration": "Konfigurasi",
54
+ "docs.nav.using_with_react": "Menggunakan dengan React",
55
+ "docs.nav.language_selector": "Pemilih Bahasa",
56
+ "docs.nav.sgerp_login": "Log Masuk SGERP",
57
+ "docs.nav.sgerp_autocomplete": "Autolengkap SGERP",
58
+ "docs.nav.sgerp_multiselect": "Pelbagai Pilihan SGERP",
59
+ "docs.nav.sgerp_table": "Jadual SGERP",
60
+ "docs.nav.sgerp_map": "Peta SGERP",
61
+ "docs.nav.async_cell": "Sel Asinkron",
62
+ "docs.nav.simulation_calendar": "Kalendar Simulasi",
63
+ "docs.nav.simulation_filters": "Penapis Simulasi",
64
+ "docs.nav.track_player": "Pemain Trek",
65
+ "docs.nav.people_transport": "Pengangkutan Awam",
66
+ "docs.nav.overview": "Gambaran Keseluruhan",
67
+ "docs.nav.simulation_detail": "Butiran Simulasi",
68
+ "docs.nav.services_page": "Halaman Perkhidmatan",
69
+ "docs.nav.templates_page": "Halaman Templat",
70
+ "docs.nav.drivers_page": "Halaman Pemandu",
71
+ "docs.nav.notifications_page": "Halaman Pemberitahuan",
72
+ "docs.nav.passengers_page": "Halaman Penumpang",
73
+ "docs.nav.passenger_detail": "Butiran Penumpang",
74
+ "docs.nav.project_table": "Jadual Projek",
75
+ "docs.nav.vehicletype_table": "Jadual Jenis Kenderaan",
76
+ "docs.nav.vehicle_table": "Jadual Kenderaan",
77
+ "docs.nav.booking_table": "Jadual Tempahan",
78
+ "docs.nav.passenger_table": "Jadual Penumpang",
79
+ "docs.nav.ticket_table": "Jadual Tiket",
80
+ "docs.nav.node_table": "Jadual Nod",
81
+ "docs.nav.driver_table": "Jadual Pemandu",
82
+ "docs.nav.operationslocation_table": "Jadual Lokasi Operasi",
83
+ "docs.nav.operationslocationgroup_table": "Jadual Kumpulan Lokasi Operasi",
84
+ "docs.nav.transaction_table": "Jadual Transaksi",
85
+ "docs.nav.simulation_table": "Jadual Simulasi",
86
+ "docs.nav.notifications_table": "Jadual Pemberitahuan",
87
+ "docs.nav.services_table": "Jadual Perkhidmatan",
88
+ "docs.nav.templates_table": "Jadual Templat",
89
+ "docs.nav.project_editor": "Editor Projek",
90
+ "docs.nav.vehicletype_editor": "Editor Jenis Kenderaan",
91
+ "docs.nav.driver_drawer": "Laci Pemandu",
92
+ "docs.nav.notification_drawer": "Laci Pemberitahuan",
93
+ "docs.nav.connections": "Sambungan",
94
+ "docs.nav.collections": "Koleksi",
95
+ "docs.nav.user_api": "API Pengguna",
96
+ "docs.nav.project_api": "API Projek",
97
+ "docs.nav.projectmember_api": "API Ahli Projek",
98
+ "docs.nav.passenger_api": "API Penumpang",
99
+ "docs.nav.simulation_api": "API Simulasi",
100
+ "docs.nav.booking_api": "API Tempahan",
101
+ "docs.nav.node_api": "API Nod",
102
+ "docs.nav.driver_api": "API Pemandu",
103
+ "docs.nav.vehicle_api": "API Kenderaan",
104
+ "docs.nav.vehicletype_api": "API Jenis Kenderaan",
105
+ // Docs Headings
106
+ "docs.interactive_examples": "Contoh Interaktif",
107
+ "docs.interactive_react_example": "Contoh React Interaktif",
108
+ "docs.live_example": "Contoh Langsung",
109
+ "docs.on_this_page": "Dalam Halaman Ini",
110
+ "docs.installation": "Pemasangan",
111
+ "docs.installation_manual": "Atau salin komponen secara manual dari registry.",
112
+ // Interactive Demo
113
+ "interactive_demo.title": "Cuba Sekarang",
114
+ "interactive_demo.description": "Uji perpustakaan dengan menyambung ke API SGERP menggunakan kelayakan anda.",
115
+ "interactive_demo.environment": "Persekitaran",
116
+ "interactive_demo.username": "Nama Pengguna",
117
+ "interactive_demo.password": "Kata Laluan",
118
+ "interactive_demo.username_placeholder": "Masukkan nama pengguna",
119
+ "interactive_demo.password_placeholder": "Masukkan kata laluan",
120
+ "interactive_demo.save_connection": "Simpan Sambungan",
121
+ "interactive_demo.test_button": "Uji Sambungan",
122
+ "interactive_demo.testing": "Menguji...",
123
+ "interactive_demo.error_credentials": "Sila masukkan nama pengguna dan kata laluan",
124
+ "interactive_demo.error_load_projects": "Gagal memuatkan projek",
125
+ "interactive_demo.success": "Pengesahan Berjaya",
126
+ "interactive_demo.failed": "Pengesahan Gagal",
127
+ "interactive_demo.email": "E-mel",
128
+ "interactive_demo.full_name": "Nama Penuh",
129
+ "interactive_demo.is_superuser": "Superpengguna",
130
+ "interactive_demo.is_active": "Aktif",
131
+ "interactive_demo.user_id": "ID Pengguna",
132
+ "interactive_demo.projects": "Projek",
133
+ "interactive_demo.all": "Semua",
134
+ "interactive_demo.first_20": "20 Pertama",
135
+ "interactive_demo.shown": "ditunjukkan",
136
+ "interactive_demo.load_all": "Muat Semua",
137
+ "interactive_demo.loading": "Memuatkan...",
138
+ "interactive_demo.code_equivalent": "Kod Setara",
139
+ // Homepage
140
+ "homepage.title": "Perpustakaan Frontend SGERP",
141
+ "homepage.subtitle": "Perpustakaan TypeScript untuk berinteraksi dengan API backend SGERP. Urus pelbagai sambungan, persekitaran, dan buat permintaan API yang selamat jenis.",
142
+ "homepage.try_it_out": "Cuba Sekarang",
143
+ "homepage.get_started": "Bermula",
144
+ "homepage.documentation": "Dokumentasi",
145
+ "homepage.feature_connection_title": "Pengurusan Sambungan",
146
+ "homepage.feature_connection_desc": "Simpan dan tukar antara pelbagai profil pengguna/persekitaran dengan mudah.",
147
+ "homepage.feature_typesafe_title": "Selamat Jenis",
148
+ "homepage.feature_typesafe_desc": "Sokongan penuh TypeScript dengan definisi jenis yang komprehensif.",
149
+ "homepage.feature_easy_title": "Mudah Digunakan",
150
+ "homepage.feature_easy_desc": "API mudah dengan pengesahan automatik dan pengendalian ralat.",
151
+ // PT App
152
+ "ptapp.title": "Pengurusan PT",
153
+ "ptapp.login_required": "Sila log masuk untuk mengakses Pengurusan PT",
154
+ "ptapp.header": "Pengurusan Pengangkutan Awam",
155
+ "ptapp.back_to_docs": "← Kembali ke Dokumentasi",
156
+ "ptapp.nav.passengers": "Penumpang",
157
+ "ptapp.nav.drivers": "Pemandu",
158
+ "ptapp.nav.notifications": "Pemberitahuan",
159
+ "ptapp.nav.geofences": "Zon Geo",
160
+ "ptapp.nav.services": "Perkhidmatan",
161
+ "ptapp.nav.templates": "Templat",
162
+ "ptapp.nav.pricings": "Dasar Harga",
163
+ "ptapp.nav.transitstopsets": "Set Perhentian Transit",
164
+ "ptapp.nav.trips": "Perjalanan",
165
+ "ptapp.nav.new_booking": "Tempahan Baharu",
166
+ "ptapp.simulation.vehicles": "Kenderaan",
167
+ "ptapp.simulation.bookings": "Tempahan",
168
+ "ptapp.passengers.title": "Penumpang",
169
+ "ptapp.passengers.description": "Urus maklumat penumpang",
170
+ "ptapp.passengers.back_to_list": "Kembali ke Penumpang",
171
+ "ptapp.passengers.personal_info": "Maklumat Peribadi",
172
+ "ptapp.passengers.bookings": "Tempahan",
173
+ "ptapp.passengers.transactions": "Transaksi",
174
+ "ptapp.passengers.gender": "Jantina",
175
+ "ptapp.passengers.date_of_birth": "Tarikh lahir",
176
+ "ptapp.passengers.contact_no": "No. hubungan",
177
+ "ptapp.drivers.title": "Pemandu",
178
+ "ptapp.drivers.description": "Urus maklumat pemandu",
179
+ "ptapp.notifications.title": "Pemberitahuan",
180
+ "ptapp.notifications.description": "Pemberitahuan SMS berjadual",
181
+ "ptapp.services.title": "Perkhidmatan",
182
+ "ptapp.services.description": "Simulasi operasi sebenar",
183
+ "ptapp.templates.title": "Templat",
184
+ "ptapp.templates.description": "Templat simulasi untuk mencipta perkhidmatan baharu",
185
+ "ptapp.pricings.title": "Dasar Harga",
186
+ "ptapp.pricings.description": "Urus peraturan dan dasar harga untuk perkhidmatan anda",
187
+ "ptapp.pricings.coming_soon": "Pengurusan dasar harga akan datang",
188
+ "ptapp.transitstopsets.title": "Set Perhentian Transit",
189
+ "ptapp.transitstopsets.description": "Urus set perhentian transit dan penapis",
190
+ // Logistics App
191
+ "logapp.title": "Aplikasi Logistik",
192
+ "logapp.login_required": "Sila log masuk untuk mengakses Aplikasi Logistik",
193
+ "logapp.header": "Aplikasi Logistik",
194
+ "logapp.back_to_docs": "← Kembali ke Dokumentasi",
195
+ "logapp.nav.planning": "Perancangan",
196
+ "logapp.nav.templates": "Templat",
197
+ "logapp.nav.vehicletypes": "Jenis Kenderaan",
198
+ "logapp.nav.drivers": "Pemandu",
199
+ "logapp.nav.geofences": "Zon Geo",
200
+ "logapp.nav.locations": "Lokasi",
201
+ "logapp.nav.locationgroups": "Kumpulan Lokasi",
202
+ "logapp.vehicletypes.title": "Jenis Kenderaan",
203
+ "logapp.vehicletypes.description": "Urus konfigurasi jenis kenderaan dan tetapan kapasiti",
204
+ "logapp.drivers.title": "Pemandu",
205
+ "logapp.drivers.description": "Urus maklumat pemandu",
206
+ "logapp.locations.title": "Lokasi",
207
+ "logapp.locations.description": "Urus lokasi operasi dan titik penghantaran",
208
+ "logapp.locationgroups.title": "Kumpulan Lokasi",
209
+ "logapp.locationgroups.description": "Susun lokasi mengikut kumpulan logik",
210
+ // Location Editor
211
+ "location.create_title": "Cipta Lokasi",
212
+ "location.edit_title": "Kemaskini Lokasi",
213
+ "location.name_placeholder": "Masukkan nama lokasi",
214
+ "location.code_placeholder": "Masukkan kod lokasi",
215
+ "location.external_id_placeholder": "Masukkan ID luaran",
216
+ "location.address_placeholder": "Masukkan alamat",
217
+ "location.postal_code_placeholder": "Masukkan poskod",
218
+ "location.latitude": "Latitud",
219
+ "location.longitude": "Longitud",
220
+ "location.latitude_placeholder": "cth. 35.6762",
221
+ "location.longitude_placeholder": "cth. 139.6503",
222
+ "location.coordinates": "Koordinat",
223
+ "location.map_label": "Lokasi pada Peta",
224
+ "location.map_instructions": "Klik pada peta untuk meletakkan penanda, seret penanda untuk melaraskan, atau masukkan koordinat secara manual",
225
+ "location.duplicate_external_id_error": "Lokasi dengan ID luaran ini sudah wujud dalam projek ini. Sila gunakan ID luaran yang berbeza atau kosongkan.",
226
+ "location.calculation_params": "Parameter Pengiraan",
227
+ "location.enter_time_fixed": "Masa Masuk (tetap)",
228
+ "location.exit_time_fixed": "Masa Keluar (tetap)",
229
+ "location.service_time_fixed": "Masa Perkhidmatan (tetap)",
230
+ "location.time_placeholder": "Masa dalam saat",
231
+ "location.coefficients": "Pekali (Jenis Produk → Jenis Permintaan → Nilai)",
232
+ "location.product_kind": "Jenis Produk",
233
+ "location.product_kind_placeholder": "cth. penumpang, kargo",
234
+ "location.demand_type": "Jenis Permintaan",
235
+ "location.demand_type_placeholder": "cth. standard, keutamaan",
236
+ "location.coefficient": "Pekali",
237
+ "location.no_coefficients": "Tiada pekali ditakrifkan. Tambah menggunakan borang di atas.",
238
+ "location.enable_cumulative_limitation": "Aktifkan Had Kumulatif",
239
+ "location.depot_service_time": "Masa Perkhidmatan Depot",
240
+ "location.max_cumulative_vehicles": "Maksimum Kenderaan Kumulatif",
241
+ "location.vehicles_placeholder": "Bilangan kenderaan",
242
+ "location.import_title": "Import Lokasi Operasi",
243
+ "location.import_select_project": "Pilih projek untuk mula mengimport lokasi",
244
+ "location.import_description": "Muat naik fail CSV dengan data lokasi",
245
+ "location.import_preview": "Semak dan edit lokasi sebelum mengimport",
246
+ "location.import_uploading": "Mencipta lokasi...",
247
+ "location.import_complete": "Import selesai",
248
+ "location.import_format": "Format: project_id,group_id,name,code,external_id,postal_code,lat,lon,address",
249
+ "location.locations": "lokasi",
250
+ "location.locations_created": "lokasi dicipta",
251
+ // Location Group Editor
252
+ "locationgroup.create_title": "Cipta Kumpulan Lokasi",
253
+ "locationgroup.edit_title": "Kemaskini Kumpulan Lokasi",
254
+ "locationgroup.view_title": "Kumpulan Lokasi",
255
+ "locationgroup.code_placeholder": "Masukkan kod kumpulan",
256
+ "locationgroup.available_locations": "Lokasi Tersedia",
257
+ "locationgroup.selected_locations": "Lokasi Kumpulan Ini",
258
+ "locationgroup.select_locations_instruction": "Pilih lokasi untuk ditambah ke kumpulan ini",
259
+ "locationgroup.select_project_first": "Pilih projek untuk melihat lokasi tersedia",
260
+ "locationgroup.no_locations_selected": "Tiada lokasi dipilih",
261
+ // Common
262
+ "common.loading": "Memuatkan...",
263
+ "common.loading_data": "Memuatkan data...",
264
+ "common.loading_routes": "Memuatkan laluan...",
265
+ "common.calculating": "Mengira",
266
+ "common.show": "Tunjuk",
267
+ "common.hide": "Sembunyi",
268
+ "common.show_all": "Tunjuk Semua",
269
+ "common.hide_all": "Sembunyi Semua",
270
+ "common.show_map": "Tunjuk Peta",
271
+ "common.hide_map": "Sembunyi Peta",
272
+ "common.timeline": "Garis Masa",
273
+ "common.route_timeline": "Garis Masa Laluan",
274
+ "common.selected": "dipilih",
275
+ "common.no_route": "Tiada laluan",
276
+ "common.no_data": "Tiada data tersedia",
277
+ "common.not_available": "T/A",
278
+ "common.save": "Simpan",
279
+ "common.saving": "Menyimpan...",
280
+ "common.cancel": "Batal",
281
+ "common.delete": "Padam",
282
+ "common.add": "Tambah",
283
+ "common.edit": "Edit",
284
+ "common.custom": "Tersuai...",
285
+ "common.create": "Cipta",
286
+ "common.creating": "Mencipta...",
287
+ "common.update": "Kemaskini",
288
+ "common.search": "Cari",
289
+ "common.filter": "Tapis",
290
+ "common.done": "Selesai",
291
+ "common.clear": "Kosongkan",
292
+ "common.clear_all": "Kosongkan Semua",
293
+ "common.select": "Pilih...",
294
+ "common.apply": "Gunakan",
295
+ "common.close": "Tutup",
296
+ "common.change": "Ubah",
297
+ "common.yes": "Ya",
298
+ "common.no": "Tidak",
299
+ "common.ok": "OK",
300
+ "common.error": "Ralat",
301
+ "common.success": "Berjaya",
302
+ "common.warning": "Amaran",
303
+ "common.info": "Maklumat",
304
+ "common.active": "Aktif",
305
+ "common.inactive": "Tidak Aktif",
306
+ "common.password": "Kata Laluan",
307
+ "common.remove": "Buang",
308
+ "common.logout": "Log Keluar",
309
+ "common.save_failed": "Gagal menyimpan",
310
+ "common.pause": "Jeda",
311
+ "common.resume": "Sambung",
312
+ "common.pausing": "Menjeda...",
313
+ "common.resuming": "Menyambung...",
314
+ "common.paused": "Dijeda",
315
+ "common.accepting": "Menerima",
316
+ "common.updating": "Mengemaskini...",
317
+ "common.accepting_bookings": "Menerima Tempahan",
318
+ "common.live": "Langsung",
319
+ "common.project": "Projek",
320
+ "common.simulation": "Simulasi",
321
+ "common.project_required": "Projek diperlukan",
322
+ "common.simulation_required": "Simulasi diperlukan",
323
+ "common.select_project": "Pilih projek",
324
+ "common.select_simulation": "Pilih simulasi",
325
+ "common.pick_date": "Pilih tarikh",
326
+ "common.import": "Import",
327
+ "common.back": "Kembali",
328
+ "common.continue": "Teruskan",
329
+ "common.vehicle_singular": "kenderaan",
330
+ "common.vehicle_plural": "kenderaan",
331
+ "common.vehicles": "kenderaan",
332
+ "common.bookings": "tempahan",
333
+ "common.help": "Bantuan",
334
+ "common.keyboard_shortcuts": "Pintasan Papan Kekunci",
335
+ // Autoplan Confirmation Dialog
336
+ "autoplan.title": "Perancangan automatik pesanan dan kenderaan",
337
+ "autoplan.vehicle_selection": "Pemilihan Kenderaan",
338
+ "autoplan.order_selection": "Pemilihan Pesanan",
339
+ "autoplan.all_vehicles": "Semua kenderaan",
340
+ "autoplan.selected_vehicles": "Kenderaan terpilih",
341
+ "autoplan.all_orders": "Semua pesanan",
342
+ "autoplan.selected_orders": "Pesanan terpilih",
343
+ "autoplan.summary": "Ringkasan",
344
+ "autoplan.assign_orders_short": "Berikan {count} pesanan kepada {vehicles} kenderaan",
345
+ "autoplan.optimize_sequences": "Optimumkan urutan perjalanan",
346
+ "autoplan.this_action_will": "Tindakan ini akan:",
347
+ "autoplan.assign_orders": "Berikan {unassigned} pesanan yang belum diberikan kepada {vehicles} kenderaan",
348
+ "autoplan.optimize_sequence": "Optimumkan urutan perjalanan untuk {vehicles} kenderaan",
349
+ "autoplan.warning_title": "Amaran",
350
+ "autoplan.warning_message": "Edit manual mungkin ditimpa. Tindakan ini tidak boleh dibatalkan.",
351
+ "autoplan.button": "Perancangan automatik",
352
+ "autoplan.button_running": "Sedang merancang...",
353
+ // Calculation/Processor
354
+ "processor.calculating_by": "Mengira oleh {username}",
355
+ "processor.history_title": "Sejarah Pengiraan",
356
+ "processor.total_calculations": "{count} jumlah pengiraan",
357
+ // Keyboard Shortcuts Help
358
+ "shortcuts.view_history": "Lihat Sejarah Pengiraan",
359
+ "shortcuts.view_history_desc": "Togol laci sejarah pemproses",
360
+ "shortcuts.launch_autoplan": "Lancarkan Perancangan Automatik",
361
+ "shortcuts.launch_autoplan_desc": "Mulakan pengoptimuman laluan",
362
+ "shortcuts.modifier_key_mac": "⌘ = Kekunci Command pada Mac",
363
+ "shortcuts.modifier_key_windows": "Ctrl+ = Kekunci Control pada Windows/Linux",
364
+ // Vehicle
365
+ "vehicle.pause_bookings_title": "Jeda tempahan?",
366
+ "vehicle.pause_bookings_message_prefix": "Anda akan menjeda semua tempahan untuk nombor perkhidmatan:",
367
+ "vehicle.pause_bookings_message_suffix": "Kenderaan akan menyiapkan tugasan sedia ada tetapi tidak akan menerima tugasan baharu sehingga tindakan ini dibatalkan.",
368
+ "vehicle.pause_bookings_button": "Jeda tempahan",
369
+ "vehicle.resume_bookings_title": "Sambung tempahan?",
370
+ "vehicle.resume_bookings_message_prefix": "Anda akan menyambung semula tempahan untuk nombor perkhidmatan:",
371
+ "vehicle.resume_bookings_message_suffix": "Kenderaan akan mula menerima tugasan daripada sistem.",
372
+ "vehicle.resume_bookings_button": "Sambung tempahan",
373
+ "vehicle.info_title": "Maklumat Kenderaan",
374
+ "vehicle.info_description": "Lihat butiran dan lokasi kenderaan",
375
+ "vehicle.gps_coordinates": "Koordinat GPS",
376
+ "vehicle.no_data": "Tiada data kenderaan tersedia",
377
+ "vehicle.create_vehicle": "Cipta Kenderaan",
378
+ "vehicle.manage_vehicles": "Urus Kenderaan",
379
+ "vehicle.unassign": "Nyahtugaskan",
380
+ "vehicle.bulk_create_vehicles": "Cipta Kenderaan Pukal",
381
+ "vehicle.vehicles_list": "Kenderaan",
382
+ "vehicle.vehicles_description": "Lepaskan pemandu dan zon geo di sini",
383
+ "vehicle.add_vehicle": "Tambah Kenderaan",
384
+ "vehicle.unnamed": "Kenderaan Tanpa Nama",
385
+ "vehicle.select_or_add": "Pilih kenderaan atau tambah yang baharu",
386
+ "vehicle.save_all_vehicles": "Simpan Semua Kenderaan",
387
+ "vehicle.shared_routing_settings": "Tetapan Laluan Dikongsi (digunakan untuk semua kenderaan)",
388
+ "vehicle.no_geofences_assigned": "Tiada zon geo ditetapkan. Seret dari bar sisi kiri.",
389
+ "vehicle.service_number": "Nombor Perkhidmatan",
390
+ "vehicle.service_number_required": "Nombor perkhidmatan diperlukan",
391
+ "vehicle.service_number_placeholder": "Masukkan nombor perkhidmatan (cth., V001)",
392
+ "vehicle.registration_number": "Nombor Pendaftaran",
393
+ "vehicle.registration_number_placeholder": "Masukkan nombor pendaftaran (cth., ABC-123)",
394
+ "vehicle.vehicle_type": "Jenis Kenderaan",
395
+ "vehicle.select_vehicle_type": "Pilih jenis kenderaan",
396
+ "vehicle.start_time": "Masa Mula",
397
+ "vehicle.end_time": "Masa Tamat",
398
+ "vehicle.color": "Warna",
399
+ "vehicle.created_successfully": "Kenderaan berjaya dicipta",
400
+ "vehicle.create_failed": "Gagal mencipta kenderaan",
401
+ "vehicle.driver": "Pemandu",
402
+ "vehicle.select_driver": "Pilih pemandu",
403
+ "vehicle.speed": "Kelajuan",
404
+ "vehicle.vehicle_cost": "Kos Kenderaan",
405
+ "vehicle.max_trip_duration": "Tempoh Perjalanan Maksimum",
406
+ "vehicle.capacity": "Kapasiti",
407
+ "vehicle.capacity_key": "Kunci Kapasiti",
408
+ "vehicle.add_capacity": "Tambah Kapasiti",
409
+ "vehicle.geofences": "Zon Geo",
410
+ "vehicle.select_geofences": "Pilih zon geo",
411
+ "vehicle.assign_to_all": "Tetapkan ke semua",
412
+ "vehicle.applied_to_all": "Digunakan ke semua kenderaan",
413
+ "vehicle.in_simulation": "dalam Simulasi",
414
+ "vehicle.in_template": "dalam Templat",
415
+ "vehicle.of_project": "daripada projek",
416
+ "vehicle.vehicle": "Kenderaan",
417
+ "vehicle.vehicle_details": "Butiran Kenderaan",
418
+ // Driver
419
+ "driver.create_driver": "Cipta Pemandu",
420
+ "driver.create_description": "Cipta akaun pemandu baharu dengan kelayakan pengguna",
421
+ "driver.view_driver": "Lihat Pemandu",
422
+ "driver.view_description": "Butiran akaun pemandu",
423
+ "driver.edit_driver": "Edit Pemandu",
424
+ "driver.edit_description": "Urus projek dan tetapan pemandu",
425
+ "driver.name_placeholder": "Masukkan nama pemandu",
426
+ "driver.login_placeholder": "Masukkan nama pengguna log masuk",
427
+ "driver.password_placeholder": "Masukkan kata laluan",
428
+ "driver.confirm_password": "Sahkan Kata Laluan",
429
+ "driver.select_driver": "Pilih pemandu",
430
+ "driver.confirm_password_placeholder": "Masukkan semula kata laluan",
431
+ "driver.projects": "Projek",
432
+ "driver.add_project_placeholder": "Cari dan tambah projek...",
433
+ "driver.no_projects": "Tiada projek ditetapkan",
434
+ "driver.change_password": "Tukar Kata Laluan",
435
+ "driver.new_password": "Kata Laluan Baharu",
436
+ "driver.new_password_placeholder": "Masukkan kata laluan baharu",
437
+ "driver.confirm_new_password": "Sahkan Kata Laluan Baharu",
438
+ "driver.confirm_new_password_placeholder": "Masukkan semula kata laluan baharu",
439
+ "driver.update_password": "Kemaskini Kata Laluan",
440
+ // Error messages
441
+ "error.organization_required": "Organisasi diperlukan",
442
+ "error.name_required": "Nama diperlukan",
443
+ "error.login_required": "Log masuk diperlukan",
444
+ "error.password_required": "Kata laluan diperlukan",
445
+ "error.password_mismatch": "Kata laluan tidak sepadan",
446
+ "error.driver_not_found": "Pemandu tidak ditemui",
447
+ "error.driver_load_failed": "Gagal memuatkan pemandu",
448
+ "error.project_add_failed": "Gagal menambah projek",
449
+ "error.project_remove_failed": "Gagal membuang projek",
450
+ // Table
451
+ "table.no_results": "Tiada data tersedia",
452
+ "table.loading": "Memuatkan...",
453
+ "table.columns": "Lajur",
454
+ "table.rows_per_page": "Baris setiap halaman",
455
+ "table.page_of": "Halaman {current} daripada {total}",
456
+ "table.select_all": "Pilih semua",
457
+ "table.deselect_all": "Nyahpilih semua",
458
+ "table.showing_items": "Menunjukkan {showing} daripada {total} item",
459
+ "table.more_available": "(lebih tersedia)",
460
+ "table.clear_filters": "Kosongkan penapis",
461
+ "table.loading_more": "Memuatkan lagi...",
462
+ // Common table columns
463
+ "column.id": "ID",
464
+ "column.name": "Nama",
465
+ "column.created": "Dicipta",
466
+ "column.modified": "Diubah",
467
+ "column.project_id": "ID Projek",
468
+ "column.project": "Projek",
469
+ "column.simulation_id": "ID Simulasi",
470
+ "column.simulation": "Simulasi",
471
+ "column.status": "Status",
472
+ "column.filter_expression": "Ungkapan Penapis",
473
+ "column.exclude_expression": "Ungkapan Pengecualian",
474
+ "column.start_time": "Masa Mula",
475
+ "column.end_time": "Masa Tamat",
476
+ "column.mileage": "Jarak Tempuh",
477
+ "column.travel_time": "Masa Perjalanan",
478
+ "column.service_number": "Nombor Perkhidmatan",
479
+ "column.color": "Warna",
480
+ "column.gps_modified": "GPS Diubah",
481
+ "column.latitude": "Latitud",
482
+ "column.longitude": "Longitud",
483
+ "column.capacity": "Kapasiti",
484
+ "column.labels": "Label",
485
+ "column.vehicle_cost": "Kos Kenderaan",
486
+ "column.mode": "Mod",
487
+ "column.timezone": "Zon Waktu",
488
+ "column.real_operations": "Operasi Sebenar",
489
+ "column.template": "Templat",
490
+ "column.actions": "Tindakan",
491
+ "column.login": "Log Masuk",
492
+ "column.first_name": "Nama Pertama",
493
+ "column.organization": "Organisasi",
494
+ "column.activity": "Aktiviti",
495
+ "column.strategy": "Strategi",
496
+ "column.currency": "Mata Wang",
497
+ "column.type": "Jenis",
498
+ "column.booking": "Tempahan",
499
+ "column.username": "Nama Pengguna",
500
+ "column.email": "E-mel",
501
+ "column.phone": "Telefon",
502
+ "column.active": "Aktif",
503
+ "column.driver": "Pemandu",
504
+ "column.pickup_time": "Masa Ambil",
505
+ "column.bookings_total": "Jumlah",
506
+ "column.bookings_assigned": "Ditetapkan",
507
+ "column.bookings_enroute": "Dalam Perjalanan",
508
+ "column.bookings_completed": "Selesai",
509
+ "column.external_id": "ID Luaran",
510
+ "column.code": "Kod",
511
+ "column.address": "Alamat",
512
+ "column.postal_code": "Poskod",
513
+ "column.coordinates": "Koordinat",
514
+ "column.group": "Kumpulan",
515
+ "column.key": "Kunci",
516
+ "column.description": "Penerangan",
517
+ // Filter labels
518
+ "filter.all": "Semua",
519
+ "filter.all_statuses": "Semua Status",
520
+ "filter.project": "Projek",
521
+ "filter.simulation": "Simulasi",
522
+ "filter.organization": "Organisasi",
523
+ "filter.status": "Status",
524
+ "filter.mode": "Mod",
525
+ "filter.recipient_type": "Jenis Penerima",
526
+ "filter.delivery_type": "Jenis Penghantaran",
527
+ // Filter placeholders
528
+ "filter.placeholder_project": "Tapis mengikut projek...",
529
+ "filter.placeholder_simulation": "Tapis mengikut simulasi...",
530
+ "filter.placeholder_organization": "Tapis mengikut organisasi...",
531
+ "filter.placeholder_template": "Tapis mengikut templat...",
532
+ "filter.placeholder_group": "Tapis mengikut kumpulan...",
533
+ "filter.activity": "Aktiviti",
534
+ "filter.activity_all": "Semua",
535
+ "filter.activity_current": "Semasa",
536
+ "filter.activity_future": "Masa Depan",
537
+ "filter.activity_past": "Lepas",
538
+ "filter.activity_booking_started": "Tempahan Dimulakan, Masa Depan",
539
+ // SMS/Notification specific columns
540
+ "column.date": "Tarikh",
541
+ "column.created_at": "Dicipta Pada",
542
+ "column.modified_at": "Diubah Pada",
543
+ "column.gps_modified_at": "GPS Diubah Pada",
544
+ "column.registration_number": "Nombor Pendaftaran",
545
+ "column.lat": "Latitud",
546
+ "column.lon": "Longitud",
547
+ "column.message": "Mesej",
548
+ "column.recipient": "Penerima",
549
+ "column.recipient_type": "Jenis Penerima",
550
+ "column.created_by": "Dicipta Oleh",
551
+ "column.delivery_type": "Jenis Penghantaran",
552
+ "column.scheduled_at": "Dijadualkan Pada",
553
+ // Recipient types
554
+ "recipient_type.delivery_client": "Klien Penghantaran",
555
+ "recipient_type.delivery_group": "Kumpulan Penghantaran",
556
+ "recipient_type.organization": "Organisasi",
557
+ "recipient_type.passenger": "Penumpang",
558
+ "recipient_type.passenger_group": "Kumpulan Penumpang",
559
+ // Booking specific
560
+ "column.booking_start": "Mula Tempahan",
561
+ "column.booking_end": "Tamat Tempahan",
562
+ "column.dropoff_time": "Masa Turun",
563
+ "column.pickup_location": "Lokasi Ambil",
564
+ "column.dropoff_location": "Lokasi Turun",
565
+ "column.min_pickup_time": "Masa Ambil Minimum",
566
+ "column.max_pickup_time": "Masa Ambil Maksimum",
567
+ "column.min_dropoff_time": "Masa Turun Minimum",
568
+ "column.max_dropoff_time": "Masa Turun Maksimum",
569
+ "column.scheduled_pickup": "Masa Ambil Berjadual",
570
+ "column.scheduled_dropoff": "Masa Turun Berjadual",
571
+ "column.demand": "Permintaan",
572
+ "column.vehicle": "Kenderaan",
573
+ "column.vehicle_id": "ID Kenderaan",
574
+ "column.location": "Lokasi",
575
+ "column.scheduled": "Dijadualkan",
576
+ "filter.vehicle": "Kenderaan",
577
+ // Dialog texts
578
+ "dialog.unassign_orders_title": "Nyahumpuk {count} pesanan?",
579
+ "dialog.unassign_orders_description": "Semua {count} pesanan terpilih akan dinyahumpuk daripada kenderaan mereka.",
580
+ "dialog.unassign_orders_from_vehicles_title": "Nyahumpuk semua pesanan daripada {count} {vehicle}?",
581
+ "dialog.unassign_orders_from_vehicles_description": "Semua {orderCount} pesanan akan dinyahumpuk daripada {vehicleCount} {vehicle} terpilih.",
582
+ "dialog.unassign_warning": "Tindakan ini tidak boleh dibatalkan. Pesanan boleh diumpuk semula, tetapi penugasan baharu mungkin berbeza daripada yang asal.",
583
+ "dialog.unassigning": "Menyahumpuk...",
584
+ // Toast notifications
585
+ "toast.autoplan_success": "Perancangan automatik berjaya dimulakan!",
586
+ "toast.autoplan_success_description": "Pengoptimuman sedang berjalan di latar belakang.",
587
+ "toast.autoplan_error": "Perancangan automatik gagal",
588
+ "toast.unassign_from_vehicles_success": "Tempahan berjaya dinyahumpuk!",
589
+ "toast.unassign_from_vehicle_singular_description": "Semua tempahan telah dialih keluar daripada kenderaan ini.",
590
+ "toast.unassign_from_vehicles_plural_description": "Semua tempahan telah dialih keluar daripada {count} kenderaan.",
591
+ "toast.unassign_error": "Gagal menyahumpuk tempahan",
592
+ "toast.unassign_orders_success": "Pesanan berjaya dinyahumpuk!",
593
+ "toast.unassign_order_singular_description": "Pesanan telah dinyahumpuk daripada kenderaannya.",
594
+ "toast.unassign_orders_plural_description": "{count} pesanan telah dinyahumpuk daripada kenderaan mereka.",
595
+ "toast.unassign_orders_error": "Gagal menyahumpuk pesanan",
596
+ // Route Details
597
+ "route_details.select_vehicle": "Pilih kenderaan untuk melihat butiran laluan",
598
+ "route_details.loading": "Memuatkan laluan...",
599
+ "route_details.waypoints": "titik laluan",
600
+ "route_details.waypoint": "titik laluan",
601
+ "route_details.nodes": "Nod",
602
+ "route_details.node_id": "Nod {id}",
603
+ "route_details.view_playback": "Tayangan GPS",
604
+ "route_details.edit": "Edit",
605
+ "route_details.route_change_prohibited": "Perubahan laluan dilarang",
606
+ "route_details.pickup_dropoff_violation": "Tidak boleh letakkan titik turun sebelum titik ambil untuk tempahan yang sama",
607
+ "route_details.start_time": "Masa Dijadualkan Titik Laluan Pertama",
608
+ "route_details.set_vehicle_start": "Mula Kenderaan",
609
+ "route_details.set_vehicle_start_tooltip": "Tetapkan masa mula kepada start_time kenderaan. Semua masa nod akan bergeser untuk mengekalkan selang.",
610
+ "route_details.set_booking_min": "Minimum Ambil Tempahan",
611
+ "route_details.set_booking_min_tooltip": "Tetapkan masa mula kepada open_time_ts paling awal daripada nod titik laluan pertama. Semua masa nod akan bergeser mengikutnya.",
612
+ "route_details.set_current_time": "Masa Semasa",
613
+ "route_details.set_current_time_tooltip": "Tetapkan masa mula kepada masa semasa. Semua masa nod akan bergeser untuk mengekalkan selang.",
614
+ "route_details.vehicle_no_agent_id": "Kenderaan tidak mempunyai ID agen",
615
+ "route_details.save_not_committed": "Perubahan laluan tidak dikomit",
616
+ "route_details.save_failed": "Gagal menyimpan perubahan laluan",
617
+ "route_details.distance_km": "{distance} km",
618
+ "route_details.duration_hours_minutes": "{hours}j {minutes}m",
619
+ // Node Types
620
+ "node_type.pickup": "Ambil",
621
+ "node_type.dropoff": "Turun",
622
+ "node_type.point": "Titik",
623
+ "node_type.vehicle_position": "Posisi Kenderaan",
624
+ "node_type.depot": "Depot",
625
+ // JIT Shifts
626
+ "jit_shifts.title": "Syif JIT",
627
+ "jit_shifts.shift": "Syif",
628
+ "jit_shifts.time": "Masa",
629
+ "jit_shifts.batch": "Kumpulan",
630
+ "jit_shifts.bookings": "Tempahan",
631
+ "jit_shifts.allocated": "Diperuntukkan",
632
+ "jit_shifts.used": "Digunakan",
633
+ "jit_shifts.active": "Aktif",
634
+ "jit_shifts.processed": "Diproses",
635
+ // Demand types
636
+ "demand.passenger": "Penumpang",
637
+ "demand.passenger_child": "Kanak-kanak",
638
+ "demand.passenger_baby": "Bayi",
639
+ "demand.wheelchair": "Kerusi Roda",
640
+ "demand.wheelchair_child": "Kerusi Roda (Kanak-kanak)",
641
+ "demand.total": "Jumlah",
642
+ "demand.click_details": "Klik untuk butiran",
643
+ "demand.expand_all": "Kembangkan semua butiran permintaan",
644
+ "demand.collapse_all": "Runtuhkan semua butiran permintaan",
645
+ // Booking states
646
+ "booking_state.unassigned": "Tidak Ditetapkan",
647
+ "booking_state.assigned": "Ditetapkan",
648
+ "booking_state.calculation": "Pengiraan",
649
+ "booking_state.cancelled_by_user": "Dibatalkan oleh Pengguna",
650
+ "booking_state.cancelled_in_calc": "Dibatalkan dalam Pengiraan",
651
+ "booking_state.completed": "Selesai",
652
+ "booking_state.enroute": "Dalam Perjalanan",
653
+ "booking_state.fail_to_board": "Gagal Menaiki",
654
+ "booking_state.fail_to_deliver": "Gagal Menghantar",
655
+ "booking_state.linked": "Dipautkan",
656
+ "booking_state.new": "Baharu",
657
+ "booking_state.pooling": "Pengumpulan",
658
+ "booking_state.prepared": "Disediakan",
659
+ "booking_state.queued": "Dalam Giliran",
660
+ "booking_state.rejected_by_system": "Tiada tawaran",
661
+ "booking_state.sent_offer": "Tawaran Dihantar",
662
+ "booking_state.all_cancelled": "Semua Dibatalkan",
663
+ // Driver specific
664
+ "column.access_to_projects": "Akses ke Projek",
665
+ // Project specific
666
+ "column.bookings_opened": "Tempahan Dibuka",
667
+ "column.is_currently_operation_time": "Dalam Masa Operasi",
668
+ "filter.timezone": "Zon Waktu",
669
+ "filter.placeholder_timezone": "Tapis mengikut zon waktu",
670
+ "project.edit_project": "Sunting Projek",
671
+ "project.loading": "Memuatkan projek...",
672
+ "project.name_label": "Nama",
673
+ "project.name_placeholder": "Nama projek",
674
+ "project.timezone_label": "Zon Waktu",
675
+ "project.timezone_placeholder": "Pilih zon waktu",
676
+ "project.timezone_help": "Zon waktu untuk pengiraan tarikh/masa",
677
+ "project.external_id_label": "ID Luaran",
678
+ "project.external_id_placeholder": "Pengecam luaran",
679
+ "project.external_id_help": "Digunakan untuk mengimport dari sumber luaran",
680
+ "project.latitude_label": "Latitud",
681
+ "project.longitude_label": "Longitud",
682
+ "project.location_help": "Lokasi lalai untuk paparan peta",
683
+ "project.saving": "Menyimpan...",
684
+ "project.update_button": "Kemaskini Projek",
685
+ "project.create_button": "Cipta Projek",
686
+ "project.cancel_button": "Batal",
687
+ "project.not_found": "Projek tidak dijumpai",
688
+ "project.load_failed": "Gagal memuatkan projek",
689
+ "project.save_failed": "Gagal menyimpan projek",
690
+ "project.refresh_failed": "Gagal menyegarkan data projek",
691
+ // VehicleType specific
692
+ "filter.name": "Nama",
693
+ "vehicletype.create_button": "Cipta Jenis Kenderaan",
694
+ "vehicletype.edit_vehicletype": "Sunting Jenis Kenderaan",
695
+ "vehicletype.loading": "Memuatkan jenis kenderaan...",
696
+ "vehicletype.not_found": "Jenis Kenderaan tidak dijumpai",
697
+ "vehicletype.load_failed": "Gagal memuatkan jenis kenderaan",
698
+ "vehicletype.save_failed": "Gagal menyimpan jenis kenderaan",
699
+ "vehicletype.name_label": "Nama",
700
+ "vehicletype.name_placeholder": "Nama jenis kenderaan (tanpa ruang)",
701
+ "vehicletype.name_description": "Pengecam unik untuk jenis kenderaan ini (cth: van, lori, motosikal).",
702
+ "vehicletype.name_no_spaces_hint": "Ruang akan dialih keluar secara automatik.",
703
+ "vehicletype.project_label": "Projek",
704
+ "vehicletype.project_placeholder": "Pilih projek...",
705
+ "vehicletype.project_description": "Projek yang mana jenis kenderaan ini dimiliki",
706
+ "vehicletype.capacity_label": "Kapasiti",
707
+ "vehicletype.capacity_add": "Tambah",
708
+ "vehicletype.capacity_empty": "Tiada kekangan kapasiti. Klik \"Tambah\" untuk cipta satu.",
709
+ "vehicletype.capacity_description": "Pasangan kunci-nilai untuk dimensi kapasiti (cth: penumpang: 4, kerusi roda: 2)",
710
+ "vehicletype.capacity_custom_placeholder": "Kunci tersuai (cth: bagasi)",
711
+ "vehicletype.capacity_custom_option": "Tersuai...",
712
+ "vehicletype.capacity_value_placeholder": "0",
713
+ "vehicletype.vehicle_cost_label": "Kos Kenderaan",
714
+ "vehicletype.vehicle_cost_placeholder": "0",
715
+ "vehicletype.max_trip_duration_label": "Tempoh Perjalanan Maksimum",
716
+ "vehicletype.max_trip_duration_placeholder": "Tempoh perjalanan maksimum",
717
+ "vehicletype.lifo_order_check_label": "Semakan Susunan LIFO",
718
+ "vehicletype.lifo_order_check_description": "Sama ada untuk menyemak susunan Terakhir Masuk Pertama Keluar",
719
+ "vehicletype.labels_label": "Label",
720
+ "vehicletype.labels_placeholder": "Pilih label...",
721
+ "vehicletype.labels_select_from_project": "Tambah dari label projek...",
722
+ "vehicletype.labels_custom_placeholder": "Taip label tersuai...",
723
+ "vehicletype.labels_description": "Label kenderaan untuk kategorisasi (cth: ambien, peti sejuk)",
724
+ "vehicletype.labels_empty": "Tiada label tersedia. Konfigurasikan label dalam tetapan projek.",
725
+ "vehicletype.save_button": "Simpan",
726
+ "vehicletype.saving_button": "Menyimpan...",
727
+ "vehicletype.update_button": "Kemaskini Jenis Kenderaan",
728
+ "vehicletype.cancel_button": "Batal",
729
+ // Capacity keys
730
+ "capacity.passenger": "Penumpang",
731
+ "capacity.wheelchair": "Kerusi Roda",
732
+ "capacity.cbcm": "m³",
733
+ "capacity.kg": "kg",
734
+ "capacity.units": "Unit",
735
+ "capacity.pallet": "Palet",
736
+ "capacity.bottles": "Botol",
737
+ "capacity.tons": "tan",
738
+ "capacity.cbm": "m³",
739
+ // Gender options
740
+ "gender.female": "Perempuan",
741
+ "gender.male": "Lelaki",
742
+ "gender.others": "Lain-lain",
743
+ "gender.prefer_not_to_say": "Lebih suka tidak menyatakan",
744
+ // Passenger
745
+ "passenger.create_passenger": "Cipta Penumpang",
746
+ "passenger.edit_passenger": "Sunting Penumpang",
747
+ "passenger.create_description": "Cipta akaun penumpang baharu",
748
+ "passenger.edit_description": "Kemaskini maklumat penumpang",
749
+ "passenger.name_placeholder": "Masukkan nama penumpang",
750
+ "passenger.email_placeholder": "Masukkan alamat e-mel",
751
+ "passenger.phone_placeholder": "Masukkan nombor telefon",
752
+ "passenger.gender_placeholder": "Pilih jantina",
753
+ "passenger.birth_date_placeholder": "Pilih tarikh lahir",
754
+ "passenger.additional_info": "Maklumat Tambahan",
755
+ "passenger.saving": "Menyimpan...",
756
+ "passenger.create_button": "Cipta Penumpang",
757
+ "passenger.update_button": "Kemaskini Penumpang",
758
+ "error.passenger_not_found": "Penumpang tidak dijumpai",
759
+ "error.passenger_load_failed": "Gagal memuatkan penumpang",
760
+ "error.passenger_save_failed": "Gagal menyimpan penumpang",
761
+ "error.passenger_refresh_failed": "Gagal menyegarkan data penumpang",
762
+ // Transaction status
763
+ "transaction_status.failure": "Gagal",
764
+ "transaction_status.failure_should_retry": "Gagal, perlu cuba semula",
765
+ "transaction_status.success": "Berjaya",
766
+ // Transaction type
767
+ "transaction_type.cancel": "Batal",
768
+ "transaction_type.cancellation_penalty": "Penalti pembatalan",
769
+ "transaction_type.change_demand": "Tukar Permintaan",
770
+ "transaction_type.coupon": "Kupon",
771
+ "transaction_type.credit_purchase": "Pembelian kredit (Tidak digunakan)",
772
+ "transaction_type.manual_credit": "Kredit manual",
773
+ "transaction_type.passenger_schedule": "Jadual penumpang",
774
+ "transaction_type.pay_outstanding": "Bayar tertunggak (Tidak digunakan)",
775
+ "transaction_type.payment": "Bayaran",
776
+ "transaction_type.penalty_payment": "Bayaran penalti (Tidak digunakan)",
777
+ "transaction_type.pickup": "Pengambilan",
778
+ "transaction_type.referee": "Rujukan",
779
+ "transaction_type.referrer": "Perujuk",
780
+ "transaction_type.refund": "Bayaran Balik",
781
+ "transaction_type.subscription_pass": "Pas Langganan",
782
+ "transaction_type.test": "Ujian",
783
+ // Transaction provider
784
+ "transaction_provider.internal": "Dalaman",
785
+ "transaction_provider.opal": "Opal",
786
+ "transaction_provider.stripe": "Stripe",
787
+ // Transaction currency
788
+ "transaction_currency.idr": "Rupiah Indonesia",
789
+ "transaction_currency.jpy": "Yen Jepun",
790
+ "transaction_currency.php": "Peso Filipina",
791
+ "transaction_currency.sgd": "Dolar Singapura",
792
+ "transaction_currency.thb": "Baht Thai",
793
+ // Passenger/Transaction specific
794
+ "column.amount": "Jumlah",
795
+ "column.timestamp": "Cap Waktu",
796
+ "column.passenger": "Penumpang",
797
+ "column.payment_status": "Status Bayaran",
798
+ "column.payment_method": "Kaedah Bayaran",
799
+ "column.refunded": "Dibayar Balik",
800
+ "column.transaction_type": "Jenis Transaksi",
801
+ "column.provider": "Penyedia",
802
+ "filter.payment_status": "Status Bayaran",
803
+ "filter.payment_method": "Kaedah Bayaran",
804
+ "filter.transaction_type": "Jenis Transaksi",
805
+ // Notifications
806
+ "notifications.title": "Notifikasi",
807
+ "notifications.status_scheduled": "Dijadualkan",
808
+ "notifications.status_sending": "Menghantar",
809
+ "notifications.status_sent": "Dihantar",
810
+ "notifications.status_cancelled": "Dibatalkan",
811
+ "notifications.recipient_type_delivery_client": "Klien Penghantaran",
812
+ "notifications.recipient_type_delivery_group": "Kumpulan Penghantaran",
813
+ "notifications.recipient_type_organization": "Organisasi",
814
+ "notifications.recipient_type_passenger": "Penumpang",
815
+ "notifications.recipient_type_passenger_group": "Kumpulan Penumpang",
816
+ "notifications.delivery_type_push": "Notifikasi Push",
817
+ "notifications.delivery_type_sms": "SMS",
818
+ // Notification Drawer
819
+ "notification.recipient_type_label": "Jenis Penerima",
820
+ "notification.recipient_organization": "Organisasi",
821
+ "notification.recipient_passenger": "Penumpang",
822
+ "notification.organization_label": "Organisasi",
823
+ "notification.organization_placeholder": "Pilih organisasi...",
824
+ "notification.passenger_label": "Penumpang",
825
+ "notification.passenger_placeholder": "Pilih penumpang...",
826
+ "notification.title_label": "Tajuk",
827
+ "notification.title_placeholder": "Tajuk notifikasi",
828
+ "notification.body_label": "Mesej",
829
+ "notification.body_placeholder": "Mesej notifikasi",
830
+ "notification.url_label": "URL",
831
+ "notification.url_placeholder": "https://example.com",
832
+ "notification.send_timing_label": "Masa Penghantaran",
833
+ "notification.send_now": "Hantar Sekarang",
834
+ "notification.send_later": "Jadualkan untuk Kemudian",
835
+ "notification.timezone_label": "Zon Waktu",
836
+ "notification.timezone_placeholder": "Pilih zon waktu",
837
+ "notification.date_label": "Tarikh",
838
+ "notification.date_placeholder": "Pilih tarikh",
839
+ "notification.time_label": "Masa",
840
+ "notification.time_placeholder": "Pilih masa",
841
+ "notification.creating": "Mencipta...",
842
+ "notification.create_button": "Cipta Notifikasi",
843
+ "notification.error_select_organization": "Sila pilih organisasi",
844
+ "notification.error_select_passenger": "Sila pilih penumpang",
845
+ "notification.error_title_required": "Tajuk diperlukan",
846
+ "notification.error_body_required": "Mesej diperlukan",
847
+ "notification.error_datetime_required": "Tarikh dan masa diperlukan untuk notifikasi berjadual",
848
+ "notification.error_project_required": "Tidak dapat menentukan projek dari penerima",
849
+ "notification.error_refresh_failed": "Gagal menyegarkan data notifikasi",
850
+ "notification.error_create_failed": "Gagal mencipta notifikasi",
851
+ "notification.preview_now": "sekarang",
852
+ "notification.preview_title": "Tajuk Notifikasi",
853
+ "notification.preview_body": "Mesej notifikasi akan muncul di sini...",
854
+ "notification.preview_app_name": "Aplikasi PT",
855
+ "notification.preview_app_icon": "PT",
856
+ // Template Drawer
857
+ "template.create_title": "Cipta Templat",
858
+ "template.create_description": "Cipta templat simulasi baharu",
859
+ "template.create_button": "Cipta Templat",
860
+ "template.type_label": "Jenis Templat",
861
+ "template.type_jit": "JIT",
862
+ "template.type_on-demand": "Atas Permintaan",
863
+ "template.project_label": "Projek",
864
+ "template.project_placeholder": "Cari projek...",
865
+ "template.geofence_label": "Zon Geo",
866
+ "template.geofence_placeholder": "Pilih zon geo...",
867
+ "template.geofences_zones_label": "Zon Geo Tambahan",
868
+ "template.geofences_zones_placeholder": "Pilih zon geo tambahan...",
869
+ "template.pickup_stops_label": "Set Perhentian Pengambilan",
870
+ "template.pickup_stops_placeholder": "Pilih set perhentian pengambilan...",
871
+ "template.dropoff_stops_label": "Set Perhentian Penghantaran",
872
+ "template.dropoff_stops_placeholder": "Pilih set perhentian penghantaran...",
873
+ "template.pricing_label": "Harga",
874
+ "template.pricing_placeholder": "Pilih harga...",
875
+ "template.name_label": "Nama Templat",
876
+ "template.name_placeholder": "Masukkan nama templat",
877
+ "template.routing_profile_label": "Profil Penghalaan Kenderaan",
878
+ "template.routing_profile_placeholder": "Pilih profil penghalaan...",
879
+ "template.map_token": "Token Peta Penghalaan Kenderaan",
880
+ "template.select_map_token": "Pilih token peta...",
881
+ "template.walking_profile_label": "Profil Penghalaan Berjalan",
882
+ // Routing Engine Settings
883
+ "routing_settings.advanced_settings": "Tetapan Penghalaan Lanjutan",
884
+ "routing_settings.key": "Kunci API",
885
+ "routing_settings.url": "URL Perkhidmatan Penghalaan",
886
+ "routing_settings.speed": "Kelajuan Lalai",
887
+ "routing_settings.time_factor": "Faktor Masa",
888
+ "routing_settings.road_network": "Rangkaian Jalan",
889
+ "routing_settings.routing_engine_name": "Enjin Penghalaan",
890
+ "routing_settings.profile": "Profil Penghalaan",
891
+ "routing_settings.mapmatcher_radius": "Jejari Mapmatcher",
892
+ "routing_settings.make_depot_zero": "Jadikan Depoh Sifar",
893
+ "routing_settings.use_speed_in_routing": "Guna Kelajuan dalam Penghalaan",
894
+ "routing_settings.disable_curb_for_destination_navigation": "Lumpuhkan Curb untuk Destinasi",
895
+ "routing_settings.intermediate_curb": "Curb Pertengahan",
896
+ "routing_settings.add_optional_field": "Tambah Medan Pilihan",
897
+ "template.walking_profile_placeholder": "Pilih profil berjalan...",
898
+ "template.qos_parameters_label": "Parameter QoS",
899
+ "template.qos_extended_parameters_label": "Parameter QoS & Lanjutan",
900
+ "template.qos_section_title": "Kualiti Perkhidmatan",
901
+ "template.extended_section_title": "Parameter Lanjutan",
902
+ "template.algo_type_label": "Jenis Algoritma",
903
+ "template.algo_type_dynamic": "Dinamik",
904
+ "template.algo_type_static": "Statik",
905
+ "template.max_additional_journey_time_label": "Masa Perjalanan Tambahan Maksimum",
906
+ "template.max_additional_journey_time_percent_label": "Masa Perjalanan Tambahan Maksimum %",
907
+ "template.min_advance_booking_window_label": "Tetingkap Tempahan Awal Minimum",
908
+ "template.max_advance_booking_window_label": "Tetingkap Tempahan Awal Maksimum",
909
+ "template.max_walking_distance_label": "Jarak Berjalan Maksimum",
910
+ "template.acceptable_waiting_time_label": "Masa Menunggu Diterima",
911
+ "template.seconds_unit": "saat",
912
+ "template.percent_unit": "%",
913
+ "template.meters_unit": "meter",
914
+ "template.start_time_label": "Masa Mula",
915
+ "template.start_time_placeholder": "Pilih masa mula",
916
+ "template.end_time_label": "Masa Tamat",
917
+ "template.end_time_placeholder": "Pilih masa tamat",
918
+ "template.end_time_next_day": "+1 Hari",
919
+ "template.booking_time_range_label": "Julat Masa Tempahan",
920
+ "template.booking_time_range_description": "Tetingkap masa pilihan untuk menerima tempahan. Jika tidak ditetapkan, lalai kepada julat masa perkhidmatan.",
921
+ "template.booking_start_time_label": "Masa Mula Tempahan",
922
+ "template.booking_end_time_label": "Masa Tamat Tempahan",
923
+ "template.booking_days_before_suffix": "hari sebelum",
924
+ "template.booking_days_after_suffix": "hari selepas",
925
+ "template.error_invalid_booking_time": "Julat Masa Tempahan Tidak Sah",
926
+ "template.error_booking_end_before_start": "Masa tamat tempahan tidak boleh lebih awal daripada masa mula tempahan",
927
+ "template.shifts_title": "Syif",
928
+ "template.add_shift": "Tambah Syif",
929
+ "template.delete_shift_title": "Padam Syif",
930
+ "template.delete_shift_confirm": "Adakah anda benar-benar ingin memadam syif ini?",
931
+ "template.shift_type_label": "Jenis",
932
+ "template.shift_type_home_to_work": "Rumah → Kerja",
933
+ "template.shift_type_work_to_home": "Kerja → Rumah",
934
+ "template.shift_type_h2w_short": "R→K",
935
+ "template.shift_type_w2h_short": "K→R",
936
+ "template.shift_label": "Syif",
937
+ "template.departure_time_label": "Berlepas",
938
+ "template.departure_short": "Lps",
939
+ "template.arrival_time_label": "Tiba",
940
+ "template.arrival_short": "Tiba",
941
+ "template.batch_time_label": "Masa Kumpulan",
942
+ "template.batch_short": "Kump",
943
+ "template.vehicle_count_label": "Bilangan Kenderaan",
944
+ "template.vehicles_unit": "kenderaan",
945
+ "template.copy_button": "Salin",
946
+ "template.minutes_unit": "min",
947
+ "template.no_shifts": "Tiada syif ditambah lagi. Klik 'Tambah Syif' untuk cipta satu.",
948
+ "template.no_shifts_title": "Tiada Syif",
949
+ "template.no_shifts_description": "Tambah syif untuk bermula",
950
+ "template.vehicles_title": "Kenderaan",
951
+ "template.no_vehicles": "Tiada kenderaan. Tambah syif untuk jana kenderaan.",
952
+ "template.vehicle_driving_side_label": "Sisi Memandu Kenderaan",
953
+ "template.driving_side_left": "Kiri",
954
+ "template.driving_side_right": "Kanan",
955
+ "template.vehicle_shift_distance_label": "Jarak Anjakan Kenderaan",
956
+ "template.shrink_time_delta_label": "Delta Masa Pengecutan",
957
+ "template.reverse_shrink_time_delta_label": "Delta Masa Pengecutan Songsang",
958
+ "template.offer_auto_cancellation_timeout_label": "Tamat Masa Pembatalan Auto Tawaran",
959
+ "template.boarding_pass_label": "Jenis Pas Menaiki",
960
+ "template.boarding_pass_service_number": "Nombor Perkhidmatan",
961
+ "template.boarding_pass_qr_code": "Kod QR",
962
+ "template.vehicle_selection_rules_title": "Peraturan Pemilihan Kenderaan",
963
+ "template.vehicle_filter_zero_coordinates": "Tapis kenderaan dengan koordinat sifar",
964
+ "template.vehicle_filter_zero_coordinates_only_after_booking_start_time": "Tapis koordinat sifar hanya selepas masa mula tempahan",
965
+ "template.vehicle_filter_zero_coordinates_only_after_start_time": "Tapis koordinat sifar hanya selepas masa mula",
966
+ "template.vehicle_selection_by_emptiness": "Pilih mengikut kekosongan kenderaan",
967
+ "template.vehicle_selection_by_remoteness": "Pilih mengikut kejauhan kenderaan",
968
+ "template.vehicle_selection_in_service": "Hanya pilih kenderaan dalam perkhidmatan",
969
+ "template.vehicle_selection_in_use": "Hanya pilih kenderaan dalam penggunaan",
970
+ "template.start_time_end_time_limitations": "Gunakan had masa mula/tamat",
971
+ "template.vehicle_selection_arrive_earlier_seconds": "Tiba Lebih Awal (saat)",
972
+ "template.vehicle_selection_by_distance_fallback_radius_m": "Jejari Sandaran Jarak",
973
+ "template.vehicle_capacity_label": "Kapasiti Kenderaan",
974
+ "template.capacity_label_short": "Kapasiti",
975
+ "template.on_demand_label": "Atas Permintaan",
976
+ "template.no_capacity": "Tiada kekangan kapasiti. Klik 'Tambah' untuk cipta satu.",
977
+ "template.capacity_description": "Kekangan kapasiti (cth: penumpang: 4, kerusi roda: 2)",
978
+ "template.capacity_key_passenger": "penumpang",
979
+ "template.capacity_key_wheelchair": "kerusi roda",
980
+ "template.capacity_key_cbcm": "cbcm",
981
+ "template.capacity_key_g": "g",
982
+ "template.capacity_key_kg": "kg",
983
+ "template.capacity_key_units": "unit",
984
+ "template.jit_calculation_parameters_label": "Parameter Pengiraan JIT",
985
+ "template.jit_pickup_first_stage_label": "Pengambilan - Jarak Berjalan Maksimum (Peringkat Pertama)",
986
+ "template.jit_pickup_waypoint_first_stage_label": "Pengambilan - Jarak Berjalan Maksimum untuk Nod Waypoint (Peringkat Pertama)",
987
+ "template.jit_pickup_second_stage_label": "Pengambilan - Jarak Berjalan Maksimum (Peringkat Kedua)",
988
+ "template.jit_dropoff_first_stage_label": "Penghantaran - Jarak Berjalan Maksimum (Peringkat Pertama)",
989
+ "template.jit_dropoff_waypoint_first_stage_label": "Penghantaran - Jarak Berjalan Maksimum untuk Nod Waypoint (Peringkat Pertama)",
990
+ "template.jit_dropoff_second_stage_label": "Penghantaran - Jarak Berjalan Maksimum (Peringkat Kedua)",
991
+ "template.stop_type_bus_stop": "Perhentian Bas",
992
+ "template.stop_type_lamp_post": "Tiang Lampu",
993
+ "template.stop_type_petrol_station": "Stesen Minyak",
994
+ "template.stop_type_taxi_stand": "Perhentian Teksi",
995
+ "template.stop_type_lobby": "Lobi",
996
+ "template.stop_type_mrt_station": "Stesen MRT",
997
+ "template.stop_type_lrt_station": "Stesen LRT",
998
+ "template.stop_type_building": "Bangunan",
999
+ "template.stop_type_virtual_stop": "Perhentian Maya",
1000
+ "template.stop_type_other": "Lain-lain",
1001
+ "template.jit_pickup_artificial_nodes_label": "Pengambilan - Jarak Berjalan Maksimum untuk Nod Buatan",
1002
+ "template.jit_general_settings_label": "Tetapan Umum",
1003
+ "template.jit_commute_offer_prefix_label": "Awalan Nama Tawaran Perjalanan",
1004
+ "template.jit_dropoff_artificial_stops_label": "Bilangan Perhentian Buatan Penghantaran",
1005
+ "template.jit_dropoff_service_time_label": "Masa Perkhidmatan Penghantaran (saat)",
1006
+ "template.jit_waypoints_chunk_size_label": "Saiz Kumpulan Pengiraan Waypoint",
1007
+ "template.jit_engine_settings_label": "Tetapan Enjin",
1008
+ "template.jit_vehicle_costs_label": "Kos Kenderaan",
1009
+ "template.jit_guided_local_search_label": "Pekali Lambda Carian Tempatan Berpandu",
1010
+ "template.jit_solver_settings_label": "Tetapan Penyelesai",
1011
+ "template.jit_first_solution_strategies_label": "Strategi Penyelesaian Pertama",
1012
+ "template.jit_max_pool_size_label": "Saiz Kolam Maksimum",
1013
+ "template.jit_node_weight_coeff_label": "Pekali Berat Nod",
1014
+ "template.jit_shifts_solver_retries_label": "Percubaan Semula Maksimum Penyelesai Syif",
1015
+ "template.jit_time_limit_1st_phase_label": "Had Masa Fasa Pertama (ms)",
1016
+ "template.jit_time_limit_2nd_phase_label": "Had Masa Fasa Kedua (ms)",
1017
+ "template.jit_trip_cost_label": "Kos Perjalanan",
1018
+ "template.jit_geofence_vehicles_priority_label": "Keutamaan Kenderaan Zon Geo",
1019
+ "template.jit_log_search_label": "Log Carian",
1020
+ "template.strategy_automatic": "Automatik",
1021
+ "template.strategy_global_cheapest_arc": "Arc Paling Murah Global",
1022
+ "template.strategy_local_cheapest_arc": "Arc Paling Murah Tempatan",
1023
+ "template.strategy_path_cheapest_arc": "Arc Paling Murah Laluan",
1024
+ "template.strategy_path_most_constrained_arc": "Arc Paling Terkekang Laluan",
1025
+ "template.strategy_evaluator_strategy": "Strategi Penilai",
1026
+ "template.strategy_all_unperformed": "Semua Tidak Dilaksanakan",
1027
+ "template.strategy_best_insertion": "Penyisipan Terbaik",
1028
+ "template.strategy_parallel_cheapest_insertion": "Penyisipan Paling Murah Selari",
1029
+ "template.strategy_local_cheapest_insertion": "Penyisipan Paling Murah Tempatan",
1030
+ "template.strategy_savings": "Penjimatan",
1031
+ "template.strategy_sweep": "Sapuan",
1032
+ "template.strategy_first_unbound_min_value": "Nilai Min Tidak Terikat Pertama",
1033
+ "template.strategy_christofides": "Christofides",
1034
+ "template.strategy_sequential_cheapest_insertion": "Penyisipan Paling Murah Berjujukan",
1035
+ "template.strategy_adjustable_parallel_cheapest_insertion": "Penyisipan Paling Murah Selari Boleh Laras",
1036
+ "template.strategy_logistics_parallel_cheapest_insertion": "Penyisipan Paling Murah Selari Logistik",
1037
+ "template.commute_offer": "Tawaran Perjalanan",
1038
+ "template.creation_success_title": "Templat Berjaya Dicipta",
1039
+ "template.creation_success_description": "Templat anda telah dicipta dengan keputusan berikut:",
1040
+ "template.vehicles_created": "kenderaan dicipta",
1041
+ "template.invalid_vehicles": "kenderaan tidak sah",
1042
+ "template.overlaps_detected": "pertindihan dikesan",
1043
+ "template.drivers_title": "Pemandu",
1044
+ "template.drivers_description": "Seret & lepas untuk menetapkan",
1045
+ "template.driver_assignment_error": "Ralat Penetapan Pemandu: Setiap pemandu hanya boleh ditetapkan kepada satu kenderaan",
1046
+ "template.driver_assignment_error_jit": "Ralat Penetapan Pemandu: Setiap pemandu hanya boleh ditetapkan kepada satu kenderaan bagi setiap syif",
1047
+ "template.auto_assign_all": "Auto-tetapkan Semua",
1048
+ "template.unassign_all": "Nyahtetapkan Semua",
1049
+ "template.vehicles_will_be_created": "kenderaan akan dicipta",
1050
+ "template.excluded": "dikecualikan",
1051
+ "template.of": "daripada",
1052
+ "template.vehicles_shown": "kenderaan ditunjukkan",
1053
+ "template.restore_all": "Pulihkan Semua",
1054
+ "template.vehicles_removed": "kenderaan dialih keluar",
1055
+ "template.no_drivers": "Tiada pemandu tersedia untuk projek ini",
1056
+ "template.geofences_title": "Zon Geo",
1057
+ "template.no_geofences": "Tiada zon geo tambahan dipilih",
1058
+ "template.view_template": "Lihat Templat",
1059
+ // Pricing
1060
+ "pricing.drawer_description": "Konfigurasikan butiran dasar harga",
1061
+ "pricing.create_title": "Cipta Dasar Harga",
1062
+ "pricing.edit_title": "Sunting Dasar Harga",
1063
+ "pricing.view_title": "Dasar Harga",
1064
+ "pricing.save": "Simpan Harga",
1065
+ "pricing.saving": "Menyimpan...",
1066
+ "pricing.cancel": "Batal",
1067
+ "pricing.edit": "Sunting",
1068
+ // Basic Info
1069
+ "pricing.basic_info": "Maklumat Asas",
1070
+ "pricing.name_label": "Nama",
1071
+ "pricing.name_placeholder": "Masukkan nama dasar harga",
1072
+ "pricing.currency_label": "Mata Wang",
1073
+ "pricing.currency_placeholder": "Pilih mata wang",
1074
+ "pricing.currency_sgd": "SGD - Dolar Singapura",
1075
+ "pricing.currency_usd": "USD - Dolar AS",
1076
+ "pricing.currency_jpy": "JPY - Yen Jepun",
1077
+ "pricing.variability_label": "Kebolehubahan",
1078
+ "pricing.variability_placeholder": "Pilih kebolehubahan",
1079
+ "pricing.variability_exact": "Tepat",
1080
+ "pricing.variability_approximate": "Anggaran",
1081
+ "pricing.variability_range": "Julat",
1082
+ "pricing.strategy_help": "Hanya strategi linear disokong pada masa ini",
1083
+ // Payment Methods
1084
+ "pricing.payment_methods": "Kaedah Bayaran",
1085
+ "pricing.payment_methods_customer": "Kaedah Bayaran Pelanggan",
1086
+ "pricing.payment_methods_operator": "Kaedah Bayaran Operator",
1087
+ "pricing.payment_method_type": "Jenis Kaedah",
1088
+ "pricing.payment_provider": "Penyedia",
1089
+ "pricing.add_payment_method": "Tambah Kaedah Bayaran",
1090
+ "pricing.payment_type_cash": "Tunai",
1091
+ "pricing.payment_type_card": "Kad",
1092
+ "pricing.payment_type_wallet": "Dompet",
1093
+ "pricing.provider_internal": "Dalaman",
1094
+ "pricing.provider_stripe": "Stripe",
1095
+ "pricing.provider_opal": "Opal",
1096
+ // Tickets Configuration
1097
+ "pricing.tickets_configuration": "Konfigurasi Tiket",
1098
+ "pricing.add_section": "Tambah Bahagian",
1099
+ "pricing.section_items": "Item Bahagian",
1100
+ "pricing.add_item": "Tambah Item",
1101
+ "pricing.section_constraints_min_demand": "Permintaan Minimum Keseluruhan",
1102
+ "pricing.section_constraints_help": "Permintaan minimum keseluruhan yang diperlukan untuk bahagian ini",
1103
+ "pricing.section_title": "Tajuk Bahagian",
1104
+ "pricing.section_constraints": "Kekangan Bahagian",
1105
+ "pricing.total_minimum_demand": "Jumlah Permintaan Minimum",
1106
+ "pricing.add_ticket_item": "Tambah Item Tiket",
1107
+ "pricing.item_ticket_type": "Jenis Tiket",
1108
+ "pricing.item_name_en": "Nama Item (Inggeris)",
1109
+ "pricing.item_name_ja": "Nama Item (Jepun)",
1110
+ "pricing.ticket_type": "Jenis Tiket",
1111
+ "pricing.ticket_passenger": "Penumpang",
1112
+ "pricing.ticket_passenger_child": "Penumpang Kanak-kanak",
1113
+ "pricing.ticket_passenger_baby": "Penumpang Bayi",
1114
+ "pricing.ticket_wheelchair": "Kerusi Roda",
1115
+ "pricing.ticket_wheelchair_child": "Kerusi Roda Kanak-kanak",
1116
+ "pricing.ticket_wheelchair_baby": "Kerusi Roda Bayi",
1117
+ "pricing.ticket_bicycle": "Basikal",
1118
+ "pricing.ticket_stroller": "Kereta Sorong",
1119
+ "pricing.ticket_luggage": "Bagasi",
1120
+ "pricing.max": "Maks",
1121
+ "pricing.require_driver_verification": "Memerlukan Pengesahan Pemandu",
1122
+ "pricing.title_en": "Tajuk (Inggeris)",
1123
+ "pricing.title_ja": "Tajuk (Jepun)",
1124
+ "pricing.subtitle_en": "Subtajuk (Inggeris)",
1125
+ "pricing.subtitle_ja": "Subtajuk (Jepun)",
1126
+ "pricing.description_en": "Penerangan (Inggeris)",
1127
+ "pricing.description_ja": "Penerangan (Jepun)",
1128
+ // Format & Rounding
1129
+ "pricing.format_rounding": "Format & Pembundaran",
1130
+ "pricing.format": "Format Harga",
1131
+ "pricing.format_help": "Guna {value} sebagai pemegang tempat. Contoh: RM{value} atau {value} MYR",
1132
+ "pricing.format_localized": "Format Tempatan",
1133
+ "pricing.format_localized_help": "Pilihan: Gantikan format untuk bahasa tertentu",
1134
+ "pricing.format_localized_en": "Inggeris (en)",
1135
+ "pricing.format_localized_ja": "Jepun (ja)",
1136
+ "pricing.rounding_strategy": "Strategi Pembundaran",
1137
+ "pricing.minimal_unit": "Unit Minimum",
1138
+ "pricing.minimal_unit_label": "Unit Minimum",
1139
+ "pricing.minimal_unit_placeholder": "Pilih unit minimum",
1140
+ "pricing.minimal_unit_cent": "Sen",
1141
+ "pricing.minimal_unit_integer": "Integer",
1142
+ "pricing.round_to": "Bundarkan Ke",
1143
+ "pricing.round_to_placeholder": "Pilih bundarkan ke",
1144
+ "pricing.round_to_ten": "Sepuluh",
1145
+ "pricing.round_to_one": "Satu",
1146
+ "pricing.round_to_tencent": "Sepuluh Sen",
1147
+ "pricing.round_to_cent": "Sen",
1148
+ "pricing.round_function": "Fungsi Pembundaran",
1149
+ "pricing.round_function_placeholder": "Pilih fungsi pembundaran",
1150
+ "pricing.round_function_round": "Bundar",
1151
+ "pricing.round_function_floor": "Floor",
1152
+ "pricing.round_function_ceil": "Ceil",
1153
+ "pricing.round_floor": "Floor",
1154
+ "pricing.round_round": "Bundar",
1155
+ "pricing.round_ceil": "Ceil",
1156
+ // Discounts
1157
+ "pricing.discounts": "Diskaun",
1158
+ "pricing.payment_method_discounts": "Diskaun Kaedah Bayaran",
1159
+ "pricing.organization_discounts": "Diskaun Organisasi",
1160
+ "pricing.add_discount": "Tambah Diskaun",
1161
+ "pricing.discount_kind": "Formula Diskaun",
1162
+ "pricing.discount_kind_percent_lower": "Peratus Lebih Rendah",
1163
+ "pricing.discount_kind_percent_upper": "Peratus Lebih Tinggi",
1164
+ "pricing.discount_kind_linear": "Linear",
1165
+ "pricing.discount_percent_lower": "Peratus Lebih Rendah",
1166
+ "pricing.discount_percent_higher": "Peratus Lebih Tinggi",
1167
+ "pricing.discount_constant_lower": "Pemalar Lebih Rendah",
1168
+ "pricing.discount_constant_higher": "Pemalar Lebih Tinggi",
1169
+ "pricing.discount_constant": "Pemalar",
1170
+ "pricing.discount_percentage": "Peratusan",
1171
+ "pricing.discount_description": "Penerangan",
1172
+ "pricing.discount_description_en": "Penerangan (Inggeris)",
1173
+ "pricing.discount_description_ja": "Penerangan (Jepun)",
1174
+ "pricing.payment_method_key": "Kaedah Bayaran",
1175
+ "pricing.add_organization_discount": "Tambah Diskaun Organisasi",
1176
+ "pricing.organization_code": "Kod Organisasi",
1177
+ // Pricing Rules
1178
+ "pricing.rules": "Peraturan Harga",
1179
+ "pricing.rules_per_ticket_type": "Peraturan Harga mengikut Jenis Tiket",
1180
+ "pricing.add_rule": "Tambah Peraturan",
1181
+ "pricing.distance_coefficient": "Pekali Jarak",
1182
+ "pricing.distance_coefficient_help": "Harga per kilometer dalam unit mata wang minimum",
1183
+ "pricing.initial_price": "Harga Awal",
1184
+ "pricing.initial_price_help": "Harga asas dalam unit mata wang minimum",
1185
+ "pricing.demand_limit": "Had Permintaan",
1186
+ "pricing.demand_limit_help": "Melebihi had ini menyebabkan caj tambahan",
1187
+ "pricing.demand_additional_price": "Harga Permintaan Tambahan",
1188
+ "pricing.demand_coefficient": "Pekali",
1189
+ "pricing.demand_price_coefficient": "Pekali Harga Permintaan",
1190
+ "pricing.demand_fixed_amount": "Jumlah Tetap",
1191
+ "pricing.demand_fixed_amount_label": "Jumlah Tetap Permintaan",
1192
+ "pricing.extensions": "Sambungan Harga",
1193
+ "pricing.add_extension": "Tambah Sambungan",
1194
+ "pricing.extension_type": "Jenis Sambungan",
1195
+ "pricing.extension_label": "Sambungan",
1196
+ "pricing.extension_name": "Nama Sambungan",
1197
+ "pricing.extension_stop_id": "ID Perhentian",
1198
+ "pricing.surcharge": "Caj Tambahan",
1199
+ "pricing.exact_price": "Harga Tepat",
1200
+ "pricing.discount_percent": "Diskaun %",
1201
+ "pricing.pickup_stop_ids": "ID Perhentian Pengambilan (dipisahkan dengan koma)",
1202
+ "pricing.dropoff_stop_ids": "ID Perhentian Penghantaran (dipisahkan dengan koma)",
1203
+ // Terms
1204
+ "pricing.terms": "Terma & Syarat",
1205
+ "pricing.cancellation_terms": "Terma Pembatalan",
1206
+ "pricing.fail_to_board_terms": "Terma Gagal Menaiki",
1207
+ "pricing.penalty": "Penalti",
1208
+ "pricing.grace_period": "Tempoh Kelonggaran (saat)",
1209
+ "pricing.terms_window_minutes": "Tetingkap Masa (minit)",
1210
+ "pricing.terms_window_minutes_placeholder": "Masukkan minit",
1211
+ "pricing.terms_penalty_percentage": "Peratusan Penalti",
1212
+ "pricing.terms_penalty_percentage_placeholder": "Masukkan peratusan",
1213
+ // Common
1214
+ "pricing.timestamps": "Cap Masa",
1215
+ "pricing.view_raw_json": "Lihat JSON Mentah",
1216
+ // TrackPlayer
1217
+ "trackplayer.vehicle": "Kenderaan",
1218
+ "trackplayer.simulation": "Simulasi",
1219
+ "trackplayer.latest_state": "Keadaan Terkini",
1220
+ "trackplayer.agent_id": "ID Ejen",
1221
+ "trackplayer.gps_not_updated": "GPS belum dikemaskini",
1222
+ "trackplayer.activity": "Aktiviti",
1223
+ "trackplayer.node_completions": "Penyelesaian Nod",
1224
+ "trackplayer.route_segments": "Segmen Laluan",
1225
+ "trackplayer.segment_started": "Segmen Dimulakan",
1226
+ "trackplayer.assigned_nodes_count": "Kiraan Nod Yang Ditetapkan",
1227
+ "trackplayer.vehicle_states": "Keadaan Kenderaan",
1228
+ "trackplayer.timestamp": "Cap Masa",
1229
+ "trackplayer.in_use": "Dalam Penggunaan",
1230
+ "trackplayer.nodes": "Nod",
1231
+ "trackplayer.in_use_status_changes": "Perubahan Status Dalam Penggunaan",
1232
+ "trackplayer.total_status_changes": "Jumlah Perubahan Status",
1233
+ "trackplayer.total_time_enabled": "Jumlah Masa Diaktifkan",
1234
+ "trackplayer.total_time_disabled": "Jumlah Masa Dilumpuhkan",
1235
+ "trackplayer.start_time": "Masa Mula",
1236
+ "trackplayer.end_time": "Masa Tamat",
1237
+ "trackplayer.duration": "Tempoh",
1238
+ "trackplayer.status": "Status",
1239
+ "trackplayer.enabled": "Diaktifkan",
1240
+ "trackplayer.disabled": "Dilumpuhkan",
1241
+ "trackplayer.min": "min",
1242
+ "trackplayer.minutes": "minit",
1243
+ "trackplayer.search": "Cari",
1244
+ "trackplayer.search_placeholder": "Cari...",
1245
+ "trackplayer.time_range_filter": "Penapis Julat Masa",
1246
+ "trackplayer.current_position": "Kedudukan Semasa",
1247
+ "trackplayer.match": "Padanan",
1248
+ "trackplayer.value": "Nilai",
1249
+ "trackplayer.no_results": "Tiada keputusan dijumpai",
1250
+ "trackplayer.settings": "Tetapan",
1251
+ "trackplayer.show_gps_track": "Tunjukkan jejak GPS",
1252
+ "trackplayer.show_vehicle_route": "Tunjukkan kedudukan kenderaan dan laluan yang ditetapkan",
1253
+ "trackplayer.gps_track_follow": "Ikut kedudukan jejak GPS",
1254
+ "trackplayer.use_vehicle_time_range": "Tunjukkan data hanya dalam masa mula-tamat kenderaan",
1255
+ "trackplayer.vehicle_times_not_set": "Masa mula dan tamat kenderaan tidak ditetapkan",
1256
+ "trackplayer.index": "Indeks",
1257
+ "trackplayer.node_id": "ID Nod",
1258
+ "trackplayer.booking_id": "ID Tempahan",
1259
+ "trackplayer.offer": "Tawaran",
1260
+ "trackplayer.eta": "ETA",
1261
+ "trackplayer.latest": "Terkini",
1262
+ "trackplayer.stop_name": "Nama Perhentian",
1263
+ "trackplayer.action": "Tindakan",
1264
+ "trackplayer.details": "Butiran",
1265
+ "trackplayer.loading_vehicle": "Memuatkan data kenderaan...",
1266
+ "trackplayer.loading_vehicle_states": "Memuatkan keadaan kenderaan...",
1267
+ "trackplayer.loading_nodes": "Memuatkan nod...",
1268
+ "trackplayer.loading_offers": "Memuatkan tawaran...",
1269
+ "trackplayer.loading_events": "Memuatkan acara...",
1270
+ // Transit Stop Set Drawer
1271
+ "transitstopset.create_title": "Cipta Set Perhentian Transit",
1272
+ "transitstopset.create_description": "Cipta set perhentian transit baharu dengan ungkapan penapis",
1273
+ "transitstopset.create_button": "Cipta Set Perhentian Transit",
1274
+ "transitstopset.edit_title": "Sunting Set Perhentian Transit",
1275
+ "transitstopset.edit_description": "Ubahsuai sifat dan penapis set perhentian transit",
1276
+ "transitstopset.project_label": "Projek",
1277
+ "transitstopset.project_placeholder": "Cari projek...",
1278
+ "transitstopset.name_label": "Nama",
1279
+ "transitstopset.name_placeholder": "Masukkan nama set perhentian transit",
1280
+ "transitstopset.filter_expression_label": "Ungkapan Penapis",
1281
+ "transitstopset.filter_expression_hint": "Objek JSON untuk menapis perhentian transit (cth: {\"id__lt\": 100})",
1282
+ "transitstopset.exclude_expression_label": "Ungkapan Pengecualian",
1283
+ "transitstopset.exclude_expression_hint": "Objek JSON untuk mengecualikan perhentian transit (cth: {\"id\": 50})",
1284
+ // Service Drawer
1285
+ "service.create_title": "Cipta Perkhidmatan",
1286
+ "service.create_description": "Cipta perkhidmatan baharu dari templat",
1287
+ "service.create_button": "Cipta Perkhidmatan",
1288
+ "service.project_label": "Projek",
1289
+ "service.project_placeholder": "Cari projek...",
1290
+ "service.template_label": "Templat",
1291
+ "service.template_placeholder": "Cari templat...",
1292
+ "service.name_label": "Nama Perkhidmatan",
1293
+ "service.name_placeholder": "Masukkan nama perkhidmatan",
1294
+ "service.date_range_label": "Tempoh Perkhidmatan",
1295
+ "service.active_weekdays_label": "Hari Aktif dalam Minggu",
1296
+ "service.copy_vehicles_label": "Salin Kenderaan dari Templat",
1297
+ // Date Range Picker
1298
+ "date_range.select_dates": "Pilih julat tarikh",
1299
+ // Weekdays
1300
+ "weekday.sun_short": "A",
1301
+ "weekday.mon_short": "I",
1302
+ "weekday.tue_short": "S",
1303
+ "weekday.wed_short": "R",
1304
+ "weekday.thu_short": "K",
1305
+ "weekday.fri_short": "J",
1306
+ "weekday.sat_short": "S",
1307
+ "weekday.week_starts_on": "0", // 0 = Sunday, 1 = Monday
1308
+ // Zon Geo
1309
+ "geofences.title": "Zon Geo",
1310
+ "geofences.description": "Urus sempadan dan kawasan geografi",
1311
+ "geofences.show_map": "Tunjukkan Peta",
1312
+ "geofences.hide_map": "Sembunyikan Peta",
1313
+ "geofences.selected_count": "{{count}} zon geo dipilih",
1314
+ "geofences.toggle_hint": "Klik baris untuk togol zon geo pada peta",
1315
+ "geofence.status_active": "Aktif",
1316
+ "geofence.status_inactive": "Tidak Aktif",
1317
+ "geofence.create_title": "Cipta Zon Geo",
1318
+ "geofence.create_description": "Lukis poligon pada peta, muat naik fail, atau tampal GeoJSON",
1319
+ "geofence.edit_title": "Sunting Zon Geo",
1320
+ "geofence.edit_description": "Ubahsuai geometri, nama, atau sifat lain zon geo",
1321
+ "geofence.upload_label": "Muat Naik Fail GeoJSON",
1322
+ "geofence.upload_button": "Muat Naik Fail",
1323
+ "geofence.upload_hint": "Muat naik fail GeoJSON atau lukis poligon pada peta",
1324
+ "geofence.paste_label": "Atau Tampal GeoJSON",
1325
+ "geofence.paste_placeholder": "Tampal GeoJSON di sini...",
1326
+ "geofence.paste_button": "Muatkan GeoJSON",
1327
+ "geofence.project_label": "Projek",
1328
+ "geofence.project_placeholder": "Cari projek...",
1329
+ "geofence.name_label": "Nama",
1330
+ "geofence.name_placeholder": "Masukkan nama zon geo",
1331
+ "geofence.description_label": "Penerangan",
1332
+ "geofence.description_placeholder": "Masukkan penerangan (pilihan)",
1333
+ "geofence.create_button": "Cipta Zon Geo",
1334
+ // Map Zon Geo Selector
1335
+ "map.geofences.button": "Zon Geo",
1336
+ "map.geofences.select_all": "Pilih Semua",
1337
+ "map.geofences.clear_all": "Kosongkan Semua",
1338
+ "map.geofences.main_section": "Zon Geo Utama",
1339
+ "map.geofences.vehicle_section": "Zon Geo Kenderaan",
1340
+ "map.geofences.tooltip_name": "Nama",
1341
+ "map.geofences.tooltip_key": "Kunci",
1342
+ // Import Passengers
1343
+ "import.passengers.button": "Import Penumpang",
1344
+ "import.passengers.title": "Import Penumpang",
1345
+ "import.passengers.description": "Import penumpang dari fail CSV",
1346
+ "import.passengers.template_hint": "Tidak pasti tentang format? Muat turun templat untuk bermula.",
1347
+ "import.passengers.download_template": "Muat Turun Templat CSV",
1348
+ "import.passengers.select_file": "Pilih Fail",
1349
+ "import.passengers.preview_hint": "Semak dan sunting data anda sebelum memuat naik",
1350
+ "import.passengers.rows": "baris",
1351
+ "import.passengers.add_row": "Tambah Baris",
1352
+ "import.passengers.upload": "Muat Naik",
1353
+ "import.passengers.uploading": "Memuat naik penumpang...",
1354
+ "import.passengers.error.empty_file": "Fail kosong atau tiada baris data.",
1355
+ "import.passengers.error.parse_failed": "Gagal menghurai fail CSV.",
1356
+ "import.passengers.result.success_message": "Berjaya diimport!",
1357
+ "import.passengers.result.passengers_created": "penumpang dicipta",
1358
+ "import.passengers.result.breakdown": "Pecahan Import",
1359
+ "import.passengers.result.loaded": "Dimuatkan",
1360
+ "import.passengers.result.created": "Berjaya Dicipta",
1361
+ "import.passengers.result.errors": "Ralat",
1362
+ "import.passengers.result.duplicates": "Pendua",
1363
+ "import.passengers.result.total_rows": "Jumlah Baris",
1364
+ "import.passengers.result.error_details_title": "Butiran Ralat",
1365
+ "import.passengers.result.row": "Baris",
1366
+ "import.passengers.result.more_errors": "...dan {count} ralat lagi",
1367
+ "import.passengers.download_error_report": "Muat Turun Laporan Ralat",
1368
+ "import.passengers.show_uploaded": "Tunjukkan Penumpang Yang Dimuat Naik",
1369
+ "import.passengers.error.invalid_file_type": "Jenis fail tidak sah. Sila muat naik fail CSV.",
1370
+ "import.passengers.error.file_too_large": "Fail terlalu besar. Saiz maksimum ialah 30MB.",
1371
+ "import.passengers.error.upload_failed": "Muat naik gagal. Sila cuba lagi.",
1372
+ // Import Bookings
1373
+ "import.bookings.button": "Import Tempahan",
1374
+ "import.bookings.title": "Import Tempahan",
1375
+ "import.bookings.description": "Import tempahan dari fail CSV",
1376
+ "import.bookings.template_hint": "Tidak pasti tentang format? Muat turun templat untuk bermula.",
1377
+ "import.bookings.download_template": "Muat Turun Templat CSV",
1378
+ "import.bookings.use_example": "Guna Contoh",
1379
+ "import.bookings.select_file": "Pilih Fail",
1380
+ "import.bookings.preview_hint": "Semak dan sunting data anda sebelum memuat naik",
1381
+ "import.bookings.scroll_hint": "Tatal mendatar dan menegak untuk lihat semua medan",
1382
+ "import.bookings.rows": "baris",
1383
+ "import.bookings.add_row": "Tambah Baris",
1384
+ "import.bookings.upload": "Muat Naik",
1385
+ "import.bookings.uploading": "Memuat naik tempahan...",
1386
+ "import.bookings.progress_detail": "Mencipta tempahan",
1387
+ "import.bookings.processing_row": "Memproses baris",
1388
+ "import.bookings.error.empty_file": "Fail kosong atau tiada baris data.",
1389
+ "import.bookings.error.parse_failed": "Gagal menghurai fail CSV.",
1390
+ "import.bookings.result.success_message": "Berjaya diimport!",
1391
+ "import.bookings.result.bookings_created": "tempahan dicipta",
1392
+ "import.bookings.result.breakdown": "Pecahan Import",
1393
+ "import.bookings.result.loaded": "Dimuatkan",
1394
+ "import.bookings.result.created": "Berjaya Dicipta",
1395
+ "import.bookings.result.errors": "Ralat",
1396
+ "import.bookings.result.total_rows": "Jumlah Baris",
1397
+ "import.bookings.result.error_details_title": "Butiran Ralat",
1398
+ "import.bookings.result.row": "Baris",
1399
+ "import.bookings.result.more_errors": "...dan {count} ralat lagi",
1400
+ "import.bookings.download_error_report": "Muat Turun Laporan Ralat",
1401
+ "import.bookings.error.invalid_file_type": "Jenis fail tidak sah. Sila muat naik fail CSV.",
1402
+ "import.bookings.error.file_too_large": "Fail terlalu besar. Saiz maksimum ialah 30MB.",
1403
+ "import.bookings.error.upload_failed": "Muat naik gagal. Sila cuba lagi.",
1404
+ "booking.import_bookings": "Import",
1405
+ // General Import
1406
+ "import.choose_file": "Pilih Fail",
1407
+ "import.download_example": "Muat Turun Contoh CSV",
1408
+ "import.import": "Import",
1409
+ "import.no_data": "Fail kosong atau tiada baris data",
1410
+ "import.parse_error": "Gagal menghurai fail CSV",
1411
+ "import.select_file": "Pilih Fail CSV",
1412
+ "import.errors": "ralat",
1413
+ "import.validation_errors": "Ralat Pengesahan",
1414
+ "import.uploading": "Mencipta...",
1415
+ "import.success": "Import Berjaya",
1416
+ "import.partial_success": "Berjaya Sebahagian",
1417
+ "import.created": "dicipta",
1418
+ "import.failed": "gagal",
1419
+ // Example Tabs
1420
+ "example.preview": "Pratonton",
1421
+ "example.code": "Kod",
1422
+ "example.fullscreen": "Skrin Penuh",
1423
+ "example.exit_fullscreen": "Keluar Skrin Penuh",
1424
+ "example.copy_code": "Salin kod",
1425
+ "example.language": "Bahasa",
1426
+ "example.selected_count": "Dipilih {count} {item}:",
1427
+ "example.project_label": "Projek",
1428
+ "example.templates_label": "Templat",
1429
+ // Language Selector
1430
+ "language.english": "Inggeris",
1431
+ "language.japanese": "Jepun",
1432
+ "language.select": "Pilih bahasa",
1433
+ // Timezone Selector
1434
+ "timezone.search_placeholder": "Cari zon waktu...",
1435
+ "timezone.no_results": "Tiada zon waktu dijumpai.",
1436
+ // Simulation Calendar
1437
+ "calendar.no_connection": "Tiada sambungan aktif. Sila konfigurasikan sambungan dahulu.",
1438
+ "calendar.live_example": "Contoh Langsung",
1439
+ "calendar.simulation_calendar": "Kalendar Simulasi",
1440
+ "calendar.click_dates": "Klik pada tarikh dengan titik biru untuk lihat simulasi pada hari tersebut.",
1441
+ "calendar.showing_simulations": "Menunjukkan {count} simulasi",
1442
+ "calendar.selected_date_info": "Maklumat Tarikh Dipilih",
1443
+ "calendar.simulations_on": "Simulasi pada {date}",
1444
+ "calendar.select_date": "Pilih tarikh untuk lihat simulasi",
1445
+ "calendar.no_simulations": "Tiada simulasi dijumpai untuk tarikh ini.",
1446
+ "calendar.filtered_example": "Contoh Kalendar Bertapis",
1447
+ "calendar.basic_filters": "Penapis Asas",
1448
+ "calendar.basic_filters_desc": "Pilih projek, templat, dan tarikh untuk menapis simulasi",
1449
+ "calendar.with_simulation_selector": "Dengan Pemilih Simulasi",
1450
+ "calendar.simulation_selector_desc": "Semua empat penapis termasuk pemilihan simulasi individu",
1451
+ "calendar.selected_simulation": "Simulasi Dipilih",
1452
+ "calendar.select_date_button": "Pilih tarikh...",
1453
+ "calendar.select_project_first": "Pilih projek dahulu",
1454
+ "calendar.select_date_first": "Pilih tarikh dahulu",
1455
+ "calendar.found": "dijumpai",
1456
+ "calendar.project_label": "Projek",
1457
+ // Booking
1458
+ "booking.create_booking": "Cipta Tempahan",
1459
+ "booking.new_booking": "Tempahan Baharu",
1460
+ "booking.passenger": "Penumpang",
1461
+ "booking.template": "Templat",
1462
+ "booking.date": "Tarikh",
1463
+ "booking.time": "Masa",
1464
+ "booking.departure_time": "Masa Berlepas",
1465
+ "booking.now": "Sekarang",
1466
+ "booking.specific_time": "Masa Tertentu",
1467
+ "booking.pickup": "Pengambilan",
1468
+ "booking.dropoff": "Penghantaran",
1469
+ "booking.pickup_location": "Lokasi Pengambilan",
1470
+ "booking.dropoff_location": "Lokasi Penghantaran",
1471
+ "booking.search_pickup": "Cari lokasi pengambilan...",
1472
+ "booking.search_dropoff": "Cari lokasi penghantaran...",
1473
+ "booking.tickets": "Tiket",
1474
+ "booking.payment_summary": "Ringkasan Bayaran",
1475
+ "booking.show_details": "Tunjukkan Butiran",
1476
+ "booking.hide_details": "Sembunyikan Butiran",
1477
+ "booking.calculating_price": "Mengira harga...",
1478
+ "booking.select_stops_and_tickets": "Pilih pengambilan, penghantaran, dan sekurang-kurangnya satu tiket untuk lihat harga",
1479
+ "booking.subtotal": "Subjumlah",
1480
+ "booking.discount": "Diskaun",
1481
+ "booking.organization_discount": "Diskaun organisasi",
1482
+ "booking.total": "Jumlah",
1483
+ "booking.total_fare": "Jumlah Tambang",
1484
+ "booking.cancellation_fee": "Fi pembatalan",
1485
+ "booking.fail_to_board_fee": "Fi gagal menaiki",
1486
+ "booking.after_seconds": "selepas {seconds}s",
1487
+ "booking.remarks_to_driver": "Catatan kepada Pemandu",
1488
+ "booking.remarks_placeholder": "Tambah sebarang arahan khas untuk pemandu...",
1489
+ "booking.cancel": "Batal",
1490
+ "booking.create": "Cipta Tempahan",
1491
+ "booking.creating": "Mencipta...",
1492
+ "booking.success_title": "Tempahan Berjaya Dicipta",
1493
+ "booking.success_message": "Tempahan anda telah dicipta dan disahkan",
1494
+ "booking.booking_id": "ID Tempahan",
1495
+ "booking.status": "Status",
1496
+ "booking.create_another": "Cipta Tempahan Lain",
1497
+ "booking.back_to_trips": "Kembali ke Perjalanan",
1498
+ "booking.requested": "Diminta",
1499
+ "booking.assigned": "Ditetapkan",
1500
+ "booking.assigned_stops": "Perhentian Ditetapkan",
1501
+ "booking.assigned_vehicle": "Kenderaan Ditetapkan",
1502
+ "booking.payment_method.cash": "Tunai",
1503
+ "booking.payment_method.card": "Kad",
1504
+ "booking.payment_method.digital_wallet": "Dompet Digital",
1505
+ "booking.payment_method.bank_transfer": "Pemindahan Bank",
1506
+ "booking.state.prepared": "Disediakan",
1507
+ "booking.state.assigned": "Ditetapkan",
1508
+ "booking.state.rejected_by_system": "Ditolak",
1509
+ "booking.state.cancelled": "Dibatalkan",
1510
+ "booking.state.picked_up": "Diambil",
1511
+ "booking.state.completed": "Selesai",
1512
+ "booking.state.no_show": "Tidak Hadir",
1513
+ "booking.travel_time": "{minutes} min",
1514
+ "booking.window_closed_title": "Tetingkap Tempahan Ditutup",
1515
+ "booking.window_not_started": "Tetingkap tempahan dibuka pada {time}",
1516
+ "booking.window_ended": "Tetingkap tempahan ditutup pada {time}",
1517
+ // SGERP Map
1518
+ "sgerp_map.map_style": "Gaya Peta",
1519
+ "sgerp_map.style_light": "Cerah",
1520
+ "sgerp_map.style_dark": "Gelap",
1521
+ "sgerp_map.style_satellite": "Satelit",
1522
+ "sgerp_map.style_street": "Jalan",
1523
+ "sgerp_map.style_outdoors": "Luar",
1524
+ // Table Map Controls
1525
+ "table.map_hide": "Sembunyikan peta",
1526
+ "table.map_split": "Paparan terpisah (50/50)",
1527
+ "table.map_full": "Peta penuh",
1528
+ // Country Names
1529
+ "country.us": "Amerika Syarikat",
1530
+ "country.ca": "Kanada",
1531
+ "country.gb": "United Kingdom",
1532
+ "country.au": "Australia",
1533
+ "country.nz": "New Zealand",
1534
+ "country.sg": "Singapura",
1535
+ "country.my": "Malaysia",
1536
+ "country.th": "Thailand",
1537
+ "country.id": "Indonesia",
1538
+ "country.ph": "Filipina",
1539
+ "country.vn": "Vietnam",
1540
+ "country.jp": "Jepun",
1541
+ "country.kr": "Korea Selatan",
1542
+ "country.cn": "China",
1543
+ "country.hk": "Hong Kong",
1544
+ "country.tw": "Taiwan",
1545
+ "country.in": "India",
1546
+ "country.pk": "Pakistan",
1547
+ "country.bd": "Bangladesh",
1548
+ "country.lk": "Sri Lanka",
1549
+ "country.ae": "Emiriah Arab Bersatu",
1550
+ "country.sa": "Arab Saudi",
1551
+ "country.il": "Israel",
1552
+ "country.tr": "Turki",
1553
+ "country.ru": "Rusia",
1554
+ "country.de": "Jerman",
1555
+ "country.fr": "Perancis",
1556
+ "country.it": "Itali",
1557
+ "country.es": "Sepanyol",
1558
+ "country.pt": "Portugal",
1559
+ "country.nl": "Belanda",
1560
+ "country.be": "Belgium",
1561
+ "country.ch": "Switzerland",
1562
+ "country.at": "Austria",
1563
+ "country.se": "Sweden",
1564
+ "country.no": "Norway",
1565
+ "country.dk": "Denmark",
1566
+ "country.fi": "Finland",
1567
+ "country.pl": "Poland",
1568
+ "country.cz": "Republik Czech",
1569
+ "country.gr": "Greece",
1570
+ "country.ie": "Ireland",
1571
+ "country.za": "Afrika Selatan",
1572
+ "country.eg": "Mesir",
1573
+ "country.ng": "Nigeria",
1574
+ "country.ke": "Kenya",
1575
+ "country.br": "Brazil",
1576
+ "country.mx": "Mexico",
1577
+ "country.ar": "Argentina",
1578
+ "country.cl": "Chile",
1579
+ "country.co": "Colombia",
1580
+ "country.pe": "Peru",
1581
+ "country.ve": "Venezuela",
1582
+ "country.kh": "Kemboja",
1583
+ "country.la": "Laos",
1584
+ "country.mm": "Myanmar",
1585
+ "country.bn": "Brunei",
1586
+ "country.np": "Nepal",
1587
+ "country.mv": "Maldives",
1588
+ "country.af": "Afghanistan",
1589
+ "country.iq": "Iraq",
1590
+ "country.ir": "Iran",
1591
+ "country.jo": "Jordan",
1592
+ "country.kw": "Kuwait",
1593
+ "country.lb": "Lebanon",
1594
+ "country.om": "Oman",
1595
+ "country.qa": "Qatar",
1596
+ "country.bh": "Bahrain",
1597
+ "country.ua": "Ukraine",
1598
+ "country.ro": "Romania",
1599
+ "country.hu": "Hungary",
1600
+ "country.bg": "Bulgaria",
1601
+ "country.hr": "Croatia",
1602
+ "country.rs": "Serbia",
1603
+ "country.si": "Slovenia",
1604
+ "country.sk": "Slovakia",
1605
+ "country.ee": "Estonia",
1606
+ "country.lv": "Latvia",
1607
+ "country.lt": "Lithuania",
1608
+ "country.is": "Iceland",
1609
+ "country.lu": "Luxembourg",
1610
+ "country.mt": "Malta",
1611
+ "country.cy": "Cyprus",
1612
+ // Enum: AlgoType
1613
+ "enum.algo_type.static": "Statik",
1614
+ "enum.algo_type.dynamic": "Dinamik",
1615
+ "enum.algo_type.dynamic_2_stages": "Dinamik 2 Peringkat",
1616
+ "enum.algo_type.timeless": "Tanpa Masa",
1617
+ "enum.algo_type.static_or_dynamic": "Statik atau Dinamik",
1618
+ // Enum: AlgoOptimizeQuantity
1619
+ "enum.algo_optimize_quantity.total_time": "Jumlah Masa",
1620
+ "enum.algo_optimize_quantity.total_distance": "Jumlah Jarak",
1621
+ "enum.algo_optimize_quantity.passenger_optimization": "Pengoptimuman Penumpang",
1622
+ // Enum: GenericSchedulerMode
1623
+ "enum.generic_scheduler_mode.prebook": "Pra-tempah",
1624
+ "enum.generic_scheduler_mode.real_time": "Masa Nyata",
1625
+ "enum.generic_scheduler_mode.prebook_cvrptw": "Pra-tempah CVRPTW",
1626
+ "enum.generic_scheduler_mode.logistics_real_time": "Logistik Masa Nyata",
1627
+ // Enum: LocalSearchOperator
1628
+ "enum.local_search_operator.extended_swap_active": "Pertukaran Aktif Lanjutan",
1629
+ "enum.local_search_operator.logistics_relocate_pair": "Pasangan Pindah Logistik",
1630
+ "enum.local_search_operator.default_no_operators": "Tiada Operator",
1631
+ // Enum: PathConstraintsMode
1632
+ "enum.path_constraints_mode.legacy": "Warisan",
1633
+ "enum.path_constraints_mode.logistics": "Logistik",
1634
+ // Enum: Zon GeoDefinitionStrategy
1635
+ "enum.geofence_definition_strategy.by_dropoff": "Mengikut Penghantaran",
1636
+ "enum.geofence_definition_strategy.by_pickup": "Mengikut Pengambilan",
1637
+ "enum.geofence_definition_strategy.independent": "Bebas",
1638
+ "enum.geofence_definition_strategy.mixed": "Campuran",
1639
+ // Enum: Zon GeoVehicleAllocationStrategy
1640
+ "enum.geofence_vehicle_allocation_strategy.strict": "Ketat",
1641
+ "enum.geofence_vehicle_allocation_strategy.flexible": "Fleksibel",
1642
+ // Enum: TruckBanStrategy
1643
+ "enum.truckban_strategy.default": "Lalai",
1644
+ "enum.truckban_strategy.duplicate_nodes": "Nod Pendua",
1645
+ // Enum: BookingOrderPrioritization
1646
+ "enum.booking_order_prioritization.disabled": "Dilumpuhkan",
1647
+ "enum.booking_order_prioritization.strict": "Ketat",
1648
+ "enum.booking_order_prioritization.non_strict": "Tidak Ketat",
1649
+ // Enum: NodeGroupingCapacityStrategy
1650
+ "enum.node_grouping_capacity_strategy.min": "Minimum",
1651
+ "enum.node_grouping_capacity_strategy.max": "Maksimum",
1652
+ "enum.node_grouping_capacity_strategy.median": "Median",
1653
+ "enum.node_grouping_capacity_strategy.mean": "Min",
1654
+ "enum.node_grouping_capacity_strategy.ignore": "Abaikan",
1655
+ // Enum: ManualEditApiSolverKind
1656
+ "enum.manual_edit_api_solver_kind.local": "Tempatan",
1657
+ "enum.manual_edit_api_solver_kind.remote": "Jauh",
1658
+ // Enum: LogisticsPipelineType
1659
+ "enum.logistics_pipeline_type.simple_one_stage": "Satu Peringkat Mudah",
1660
+ "enum.logistics_pipeline_type.two_stages": "Dua Peringkat",
1661
+ // Enum: FinalizationType
1662
+ "enum.finalization_type.min": "Minimum",
1663
+ "enum.finalization_type.max": "Maksimum",
1664
+ // Enum: BookingStatus
1665
+ "enum.booking_status.new": "Baharu",
1666
+ "enum.booking_status.prepared": "Disediakan",
1667
+ "enum.booking_status.queued": "Dalam Giliran",
1668
+ "enum.booking_status.calculation": "Pengiraan",
1669
+ "enum.booking_status.cancelled_in_calc": "Dibatalkan dalam Pengiraan",
1670
+ "enum.booking_status.assigned": "Ditetapkan",
1671
+ "enum.booking_status.rejected_by_system": "Ditolak oleh Sistem",
1672
+ "enum.booking_status.enroute": "Dalam Perjalanan",
1673
+ "enum.booking_status.completed": "Selesai",
1674
+ "enum.booking_status.sent_offer": "Tawaran Dihantar",
1675
+ "enum.booking_status.cancelled_by_user": "Dibatalkan oleh Pengguna",
1676
+ "enum.booking_status.pooling": "Pengumpulan",
1677
+ "enum.booking_status.fail_to_board": "Gagal Menaiki",
1678
+ "enum.booking_status.fail_to_deliver": "Gagal Menghantar",
1679
+ "enum.booking_status.linked": "Dipautkan",
1680
+ // Enum: NodeStatus
1681
+ "enum.node_status.new": "Baharu",
1682
+ "enum.node_status.assigned": "Ditetapkan",
1683
+ "enum.node_status.in_service": "Dalam Perkhidmatan",
1684
+ "enum.node_status.completed": "Selesai",
1685
+ "enum.node_status.cancelled_by_user": "Dibatalkan oleh Pengguna",
1686
+ "enum.node_status.dropped_by_algo": "Digugurkan oleh Algoritma",
1687
+ "enum.node_status.fail_to_board": "Gagal Menaiki",
1688
+ "enum.node_status.fail_to_deliver": "Gagal Menghantar",
1689
+ // Enum: NodeType
1690
+ "enum.node_type.point": "Titik",
1691
+ "enum.node_type.pickup": "Pengambilan",
1692
+ "enum.node_type.dropoff": "Penghantaran",
1693
+ "enum.node_type.depot": "Depoh",
1694
+ "enum.node_type.vehicle_position": "Kedudukan Kenderaan",
1695
+ // Enum: SimulationStatus
1696
+ "enum.simulation_status.created": "Dicipta",
1697
+ "enum.simulation_status.queued": "Dalam Giliran",
1698
+ "enum.simulation_status.running": "Berjalan",
1699
+ "enum.simulation_status.completed": "Selesai",
1700
+ "enum.simulation_status.failed": "Gagal",
1701
+ "enum.simulation_status.terminated": "Ditamatkan",
1702
+ // Enum: SimulationMode
1703
+ "enum.simulation_mode.real_time": "Masa Nyata",
1704
+ "enum.simulation_mode.fast": "Simulasi Pantas",
1705
+ "enum.simulation_mode.prebook": "Pra-tempah",
1706
+ "enum.simulation_mode.real_operations": "Operasi Sebenar",
1707
+ "enum.simulation_mode.template": "Templat",
1708
+ // Enum: BookingType
1709
+ "enum.booking_type.customer": "Pelanggan",
1710
+ "enum.booking_type.break": "Rehat",
1711
+ "enum.booking_type.pooling": "Pengumpulan",
1712
+ "enum.booking_type.estimate": "Anggaran",
1713
+ // Enum: SimulationProcessorState
1714
+ "enum.simulation_processor_state.new": "Baharu",
1715
+ "enum.simulation_processor_state.calculating": "Mengira",
1716
+ "enum.simulation_processor_state.calculated": "Dikira",
1717
+ "enum.simulation_processor_state.completed": "Selesai",
1718
+ "enum.simulation_processor_state.failed": "Gagal",
1719
+ "enum.vehicle_use_option.enabled": "Diaktifkan",
1720
+ "enum.vehicle_use_option.disabled": "Dilumpuhkan",
1721
+ // Logistics Settings Form
1722
+ "logistics_settings.section.cost_parameters": "Parameter Kos",
1723
+ "logistics_settings.section.slack_settings": "Tetapan Slack",
1724
+ "logistics_settings.section.model_parameters": "Parameter Model",
1725
+ "logistics_settings.section.vehicle_late_settings": "Tetapan Kenderaan Lewat",
1726
+ "logistics_settings.section.calculation_parameters": "Parameter Pengiraan",
1727
+ "logistics_settings.section.solver_settings": "Tetapan Penyelesai",
1728
+ "logistics_settings.section.optimization_settings": "Tetapan Pengoptimuman",
1729
+ "logistics_settings.section.logistics_specific": "Tetapan Khusus Logistik",
1730
+ "logistics_settings.section.manual_edit_api": "Tetapan API Suntingan Manual",
1731
+ "logistics_settings.section.route_cost_modification": "Pengubahsuaian Kos Laluan",
1732
+ "logistics_settings.vehicle_cost": "Kos Kenderaan",
1733
+ "logistics_settings.trip_cost": "Kos Perjalanan",
1734
+ "logistics_settings.booking_penalty": "Penalti Tempahan",
1735
+ "logistics_settings.slack_cost": "Kos Slack",
1736
+ "logistics_settings.vehicle_amortized_linear_cost_factor": "Faktor Kos Linear Pelunasan Kenderaan",
1737
+ "logistics_settings.vehicle_amortized_quadratic_cost_factor": "Faktor Kos Kuadratik Pelunasan Kenderaan",
1738
+ "logistics_settings.group_crossing_penalty": "Penalti Persilangan Kumpulan",
1739
+ "logistics_settings.slack_cost_factor": "Faktor Kos Slack",
1740
+ "logistics_settings.max_pickup_slack": "Slack Pengambilan Maksimum (saat)",
1741
+ "logistics_settings.max_dropoff_slack": "Slack Penghantaran Maksimum (saat)",
1742
+ "logistics_settings.logistics_optimize_slack": "Optimumkan Slack dalam Mod Logistik",
1743
+ "logistics_settings.should_set_max_slack_start_location_zero": "Tetapkan Slack Maksimum Lokasi Mula kepada Sifar",
1744
+ "logistics_settings.use_walking_time_to_reduce_time_windows": "Guna Masa Berjalan untuk Mengurangkan Tetingkap Masa",
1745
+ "logistics_settings.use_lifo_order_check": "Guna Semakan Susunan LIFO",
1746
+ "logistics_settings.lifo_order_check_on_all_vehicles": "Semakan Susunan LIFO pada Semua Kenderaan",
1747
+ "logistics_settings.algo_optimize_quantity": "Kuantiti Optimum Algoritma",
1748
+ "logistics_settings.allow_vehicle_late": "Benarkan Kenderaan Lewat",
1749
+ "logistics_settings.max_possible_lateness": "Kelewatan Maksimum Mungkin (saat)",
1750
+ "logistics_settings.vehicle_late_penalty_coefficient": "Pekali Penalti Kenderaan Lewat",
1751
+ "logistics_settings.use_node_weights_cost": "Guna Kos Berat Nod",
1752
+ "logistics_settings.use_path_equalizer": "Guna Penyamaan Laluan",
1753
+ "logistics_settings.use_selective_path_equalizer": "Guna Penyamaan Laluan Terpilih",
1754
+ "logistics_settings.use_mixed_time_matrix": "Guna Matriks Masa Campuran",
1755
+ "logistics_settings.path_equalizer_weight": "Berat Penyamaan Laluan",
1756
+ "logistics_settings.algorithm": "Algoritma",
1757
+ "logistics_settings.first_solution_strategies": "Strategi Penyelesaian Pertama",
1758
+ "logistics_settings.first_solution_strategies_second_stage": "Strategi Penyelesaian Pertama (Peringkat Kedua)",
1759
+ "logistics_settings.time_limit_ms": "Had Masa (ms)",
1760
+ "logistics_settings.time_limit_ms_second_stage": "Had Masa Peringkat Kedua (ms)",
1761
+ "logistics_settings.solution_limit": "Had Penyelesaian",
1762
+ "logistics_settings.lns_time_limit_ms": "Had Masa LNS (ms)",
1763
+ "logistics_settings.optimization_step": "Langkah Pengoptimuman",
1764
+ "logistics_settings.guided_local_search_lambda_coefficient": "Pekali Lambda Carian Tempatan Berpandu",
1765
+ "logistics_settings.savings_neighbors_ratio": "Nisbah Jiran Penjimatan",
1766
+ "logistics_settings.waypoints_solution_limit": "Had Penyelesaian Waypoint",
1767
+ "logistics_settings.total_to_furthest_distance_ratio": "Nisbah Jumlah kepada Jarak Terjauh",
1768
+ "logistics_settings.cvb_local_search_iterations_limit": "Had Iterasi Carian Tempatan CVB",
1769
+ "logistics_settings.cvb_fleetmin_iterations_limit": "Had Iterasi Fleetmin CVB",
1770
+ "logistics_settings.cvb_fleetmin_solutions_limit": "Had Penyelesaian Fleetmin CVB",
1771
+ "logistics_settings.cvb_fleetmin_time_limit": "Had Masa Fleetmin CVB",
1772
+ "logistics_settings.use_local_search_metaheuristic": "Guna Metaheuristik Carian Tempatan",
1773
+ "logistics_settings.use_tsp_opt": "Guna TSP Opt",
1774
+ "logistics_settings.use_depth_first_search": "Guna Carian Kedalaman Pertama",
1775
+ "logistics_settings.waypoints_optimization_second_phase": "Pengoptimuman Waypoint Fasa Kedua",
1776
+ "logistics_settings.use_all_local_search_operators": "Guna Semua Operator Carian Tempatan",
1777
+ "logistics_settings.use_cvb_local_search_operator": "Guna Operator Carian Tempatan CVB",
1778
+ "logistics_settings.log_search": "Log Carian",
1779
+ "logistics_settings.use_local_search_operators": "Guna Operator Carian Tempatan",
1780
+ "logistics_settings.only_pdp": "Hanya PDP (Masalah Pengambilan-Penghantaran)",
1781
+ "logistics_settings.should_lock_next_stop_if_vehicle_live": "Kunci Perhentian Seterusnya jika Kenderaan Langsung",
1782
+ "logistics_settings.should_optimize_fail_to_board_bookings": "Optimumkan Tempahan Gagal Menaiki",
1783
+ "logistics_settings.node_grouping_enabled": "Aktifkan Pengelompokan Nod",
1784
+ "logistics_settings.exclude_unroutable_bookings": "Kecualikan Tempahan Tidak Boleh Dilalui",
1785
+ "logistics_settings.pipeline_type": "Jenis Saluran",
1786
+ "logistics_settings.geofence_vehicle_allocation_strategy": "Strategi Peruntukan Kenderaan Zon Geo",
1787
+ "logistics_settings.geofence_definition_strategy": "Strategi Definisi Zon Geo",
1788
+ "logistics_settings.booking_order_prioritization": "Keutamaan Susunan Tempahan",
1789
+ "logistics_settings.path_constraints_mode": "Mod Kekangan Laluan",
1790
+ "logistics_settings.node_grouping_capacity_strategy": "Strategi Kapasiti Pengelompokan Nod",
1791
+ "logistics_settings.truckban_strategy": "Strategi Larangan Lori",
1792
+ "logistics_settings.average_travel_duration_to_node": "Tempoh Perjalanan Purata ke Nod (s)",
1793
+ "logistics_settings.truckban_buffer_time_windows": "Tetingkap Masa Penampan Larangan Lori (s)",
1794
+ "logistics_settings.truckban_enabled": "Larangan Lori Diaktifkan",
1795
+ "logistics_settings.allow_upload_after_simulation_start_time": "Benarkan Muat Naik Selepas Masa Mula Simulasi",
1796
+ "logistics_settings.clear_cumulative_limitations": "Kosongkan Had Kumulatif",
1797
+ "logistics_settings.section.stateless_api": "API Tanpa Keadaan",
1798
+ "logistics_settings.stateless_api_server": "Pelayan",
1799
+ "logistics_settings.stateless_api_login": "Log Masuk",
1800
+ "logistics_settings.stateless_api_password": "Kata Laluan",
1801
+ "logistics_settings.manual_edit_api_solver_kind": "Jenis Penyelesai API Suntingan Manual",
1802
+ "logistics_settings.manual_edit_finalization_type_pickups": "Jenis Pemuktamadan Suntingan Manual (Pengambilan)",
1803
+ "logistics_settings.manual_edit_finalization_type_dropoffs": "Jenis Pemuktamadan Suntingan Manual (Penghantaran)",
1804
+ "logistics_settings.manual_edit_optimize_quantity": "Kuantiti Optimum Suntingan Manual",
1805
+ "logistics_settings.manual_edit_slack_cost_factor": "Faktor Kos Slack Suntingan Manual",
1806
+ "logistics_settings.manual_edit_api_minimize_slack": "Minimumkan Slack dalam Suntingan Manual",
1807
+ "logistics_settings.manual_edit_api_use_vehicle_start_time": "Guna Masa Mula Kenderaan dalam Suntingan Manual",
1808
+ "logistics_settings.manual_edit_api_vehicle_logistics_optimize_slack": "Optimumkan Slack Logistik Kenderaan dalam Suntingan Manual",
1809
+ "logistics_settings.manual_edit_allow_vehicle_late": "Benarkan Kenderaan Lewat dalam Suntingan Manual",
1810
+ "logistics_settings.manual_edit_max_possible_lateness": "Kelewatan Maksimum Suntingan Manual (saat)",
1811
+ "logistics_settings.manual_edit_lateness_penalty_coefficient": "Penalti Kelewatan Suntingan Manual",
1812
+ "logistics_settings.route_cost_modification_primary": "Pengubahsuaian Kos Laluan Primer",
1813
+ "logistics_settings.route_cost_modification_secondary": "Pengubahsuaian Kos Laluan Sekunder",
1814
+ "logistics_settings.placeholder.select_algorithm": "Pilih algoritma",
1815
+ "logistics_settings.placeholder.select_strategies": "Pilih strategi",
1816
+ "logistics_settings.placeholder.select_quantity": "Pilih kuantiti",
1817
+ "logistics_settings.placeholder.select_pipeline_type": "Pilih jenis saluran",
1818
+ "logistics_settings.placeholder.select_strategy": "Pilih strategi",
1819
+ "logistics_settings.placeholder.select_prioritization": "Pilih keutamaan",
1820
+ "logistics_settings.placeholder.select_mode": "Pilih mod",
1821
+ "logistics_settings.placeholder.select_solver_kind": "Pilih jenis penyelesai",
1822
+ "logistics_settings.placeholder.select_finalization_type": "Pilih jenis pemuktamadan",
1823
+ "logistics_settings.placeholder.select_operators": "Pilih operator",
1824
+ // Route Cost Modification Editor
1825
+ "route_cost_modification.enabled": "Diaktifkan",
1826
+ "route_cost_modification.disabled": "Dilumpuhkan",
1827
+ "route_cost_modification.enable_section_message": "Aktifkan bahagian ini untuk konfigurasikan pengubahsuaian kos laluan",
1828
+ "route_cost_modification.time_matrix": "Matriks Masa",
1829
+ "route_cost_modification.distance_matrix": "Matriks Jarak",
1830
+ "route_cost_modification.linear_coefficient": "Pekali Linear",
1831
+ "route_cost_modification.polylinear_segment": "Segmen Polilinear",
1832
+ "route_cost_modification.relation": "Hubungan",
1833
+ "route_cost_modification.threshold": "Ambang",
1834
+ "route_cost_modification.penalty_base": "Asas Penalti",
1835
+ "route_cost_modification.penalty_rate": "Kadar Penalti",
1836
+ "route_cost_modification.ignore_first": "Abaikan Pertama",
1837
+ "route_cost_modification.ignore_last": "Abaikan Terakhir",
1838
+ "route_cost_modification.add_time_segment": "Tambah Segmen Polilinear Masa",
1839
+ "route_cost_modification.add_distance_segment": "Tambah Segmen Polilinear Jarak",
1840
+ "route_cost_modification.relation_greater": "Lebih Besar",
1841
+ "route_cost_modification.relation_less": "Lebih Kecil",
1842
+ // Async Cell Examples
1843
+ "example.async_cell.basic_title": "AsyncCell Asas",
1844
+ "example.async_cell.basic_desc": "Paparkan nama projek mengikut ID dengan pengelompokan automatik",
1845
+ "example.async_cell.custom_title": "Rendering Tersuai",
1846
+ "example.async_cell.custom_desc": "Gunakan fungsi render tersuai untuk memaparkan data kompleks",
1847
+ "example.async_cell.specialized_title": "Komponen Khusus",
1848
+ "example.async_cell.specialized_desc": "Komponen siap guna untuk kes penggunaan biasa",
1849
+ "example.async_cell.loading_title": "Dengan Keadaan Memuatkan",
1850
+ "example.async_cell.loading_desc": "Paparkan keadaan pemuatan dan fallback tersuai",
1851
+ // Project Editor Examples
1852
+ "example.project_editor.create_title": "Cipta Projek Baharu",
1853
+ "example.project_editor.create_desc": "Isi borang untuk mencipta projek baharu. Editor menggunakan pola dual-API (Tastypie untuk menulis, GET API untuk refresh).",
1854
+ "example.project_editor.create_button": "Cipta Projek Baharu",
1855
+ "example.project_editor.last_created": "Projek Terakhir Dicipta:",
1856
+ "example.project_editor.edit_title": "Edit Projek Sedia Ada",
1857
+ "example.project_editor.edit_desc": "Pilih projek dari dropdown autocomplete untuk edit. Editor akan memuatkan data semasa dan membenarkan anda mengemas kininya.",
1858
+ "example.project_editor.select_to_edit": "Pilih projek untuk edit:",
1859
+ "example.project_editor.drawer_title": "Editor dalam Drawer",
1860
+ "example.project_editor.drawer_desc": "Buka editor dalam drawer sisi untuk pengalaman pengguna yang lebih baik. Corak ini berguna apabila anda ingin mengekalkan konteks yang boleh dilihat.",
1861
+ "example.project_editor.open_drawer": "Buka Editor Drawer",
1862
+ "example.project_editor.drawer_heading": "Cipta Projek",
1863
+ // React Examples
1864
+ "example.react.title": "Contoh React Interaktif",
1865
+ "example.react.description": "Ini adalah komponen React langsung yang menggunakan hook useSGERP dengan koleksi reaktif. Jika anda belum menyambung, lawati halaman Cuba Sekarang terlebih dahulu.",
1866
+ "example.react.component_title": "Komponen Senarai Projek",
1867
+ "example.react.component_desc": "Komponen senarai mudah yang mengambil dan memaparkan projek menggunakan koleksi reaktif dari useSGERP().",
1868
+ "example.react.code_title": "Kod Komponen",
1869
+ "example.react.tab_simplified": "Dipermudahkan",
1870
+ "example.react.tab_full": "Penuh",
1871
+ "example.react.loading": "Memuatkan projek...",
1872
+ "example.react.error": "Ralat",
1873
+ "example.react.error_connection": "Pastikan anda mempunyai sambungan aktif. Lawati halaman Cuba Sekarang terlebih dahulu.",
1874
+ "example.react.no_projects": "Tiada projek dijumpai",
1875
+ "example.react.projects": "Projek",
1876
+ "example.react.more_available": "Lebih banyak tersedia",
1877
+ "example.react.all_loaded": "Semua dimuatkan",
1878
+ "example.react.inactive": "Tidak Aktif",
1879
+ "example.react.active": "Aktif",
1880
+ "example.react.loading_more": "Memuatkan...",
1881
+ "example.react.load_more": "Muatkan Lebih Banyak Projek",
1882
+ "example.react.live_component": "Ini adalah komponen React langsung yang menggunakan",
1883
+ "example.react.no_connection": "Tiada sambungan aktif",
1884
+ // Language Selector Examples
1885
+ "example.language_selector.title": "Pemilih Bahasa",
1886
+ "example.language_selector.desc": "Pilih bahasa dari dropdown. Pilihan anda akan disimpan dan kekal walaupun halaman di muat semula. Perhatikan bagaimana komponen di bawah mengubah bahasanya.",
1887
+ "example.language_selector.current": "Bahasa Semasa:",
1888
+ "example.language_selector.login_title": "Komponen Login (Dilokalkan)",
1889
+ "example.language_selector.login_desc": "Borang login ini menyesuaikan dengan bahasa yang dipilih.",
1890
+ "example.language_selector.autocomplete_title": "Komponen Autocomplete (Dilokalkan)",
1891
+ "example.language_selector.autocomplete_desc": "Mesej pemuatan menyesuaikan dengan bahasa yang dipilih.",
1892
+ "example.language_selector.selected_project": "ID Projek Dipilih:",
1893
+ "example.language_selector.implementation": "Pelaksanaan",
1894
+ "example.language_selector.implementation_desc": "Berikut adalah bagaimana contoh di atas dilaksanakan:",
1895
+ // Login Examples
1896
+ "example.login.title": "Sambung ke SGERP",
1897
+ "example.login.desc": "Masukkan kelayakan anda untuk mencipta dan mengaktifkan sambungan. Sambungan akan disimpan ke localStorage dan tersedia di seluruh tapak dokumentasi.",
1898
+ // Autocomplete Examples
1899
+ "example.autocomplete.project_title": "Autocomplete Projek",
1900
+ "example.autocomplete.project_desc": "Cari dan pilih projek",
1901
+ "example.autocomplete.selected_project": "ID Projek Dipilih:",
1902
+ "example.autocomplete.dependent_title": "Autocomplete Bersandar",
1903
+ "example.autocomplete.dependent_desc": "Pilih projek di atas untuk mengaktifkan dropdown ini. Ini menunjukkan templat projek (simulasi dengan mode=template) yang ditapis mengikut project_id.",
1904
+ "example.autocomplete.selected_template": "ID Templat Dipilih:",
1905
+ // Table Examples
1906
+ "example.table.project_title": "Jadual Projek",
1907
+ "example.table.project_desc": "Jadual interaktif dengan penapisan, penyusunan, keterlihatan lajur, dan tatal infiniti",
1908
+ // Map Examples
1909
+ "example.map.operations_title": "Peta Lokasi Operasi",
1910
+ "example.map.operations_desc": "Peta interaktif yang menunjukkan lokasi operasi dengan tooltip hover.",
1911
+ "example.map.features_title": "Ciri-ciri",
1912
+ "example.map.feature_hover": "Hover di atas lokasi untuk melihat butiran",
1913
+ "example.map.feature_style": "Tukar gaya peta menggunakan dropdown (kiri atas)",
1914
+ "example.map.feature_zoom": "Zum dan geser menggunakan tetikus atau sentuhan",
1915
+ "example.map.feature_updates": "Data dikemas kini secara automatik apabila collection berubah",
1916
+ };