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,1933 @@
1
+ export const translations = {
2
+ // SGERP Login
3
+ "sgerp_login.username": "Username",
4
+ "sgerp_login.password": "Password",
5
+ "sgerp_login.backend": "Backend",
6
+ "sgerp_login.username_placeholder": "Enter username",
7
+ "sgerp_login.password_placeholder": "Enter password",
8
+ "sgerp_login.backend_placeholder": "Select backend",
9
+ "sgerp_login.connect_button": "Connect",
10
+ "sgerp_login.connecting_button": "Connecting...",
11
+ "sgerp_login.error_fill_fields": "Please fill in all fields",
12
+ "sgerp_login.error_auth_failed": "Authentication failed",
13
+ "sgerp_login.error_failed_connect": "Failed to connect",
14
+ "sgerp_login.success_connected": "Connected successfully!",
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": "No results found",
25
+ "sgerp_autocomplete.loading": "Loading...",
26
+ "sgerp_autocomplete.select_first": "Select a project first",
27
+ "sgerp_autocomplete.placeholder": "Search...",
28
+ "sgerp_autocomplete.placeholder_project": "Search projects...",
29
+ "sgerp_autocomplete.placeholder_user": "Search users...",
30
+ "sgerp_autocomplete.placeholder_simulation": "Search simulations...",
31
+ "sgerp_autocomplete.placeholder_vehicle": "Search vehicles...",
32
+ "sgerp_autocomplete.placeholder_vehicletype": "Search vehicle types...",
33
+ "sgerp_autocomplete.placeholder_booking": "Search bookings...",
34
+ "sgerp_autocomplete.placeholder_node": "Search nodes...",
35
+ "sgerp_autocomplete.placeholder_projectmember": "Search project members...",
36
+ "sgerp_autocomplete.placeholder_passenger": "Search passengers...",
37
+ "sgerp_autocomplete.search_by_name": "Search by name...",
38
+ "sgerp_autocomplete.placeholder_template": "Select templates...",
39
+ // Navbar
40
+ "navbar.documentation": "Documentation",
41
+ "navbar.try_it_out": "Try It Out",
42
+ // Docs Navigation
43
+ "docs.nav.getting_started": "Getting Started",
44
+ "docs.nav.guides": "Guides",
45
+ "docs.nav.components": "Components",
46
+ "docs.nav.example_apps": "Example Apps",
47
+ "docs.nav.pages_for_apps": "Pages for Apps",
48
+ "docs.nav.predefined_tables": "Predefined Tables",
49
+ "docs.nav.editors": "Editors",
50
+ "docs.nav.api_reference": "API Reference",
51
+ "docs.nav.try_it_out": "Try It Out",
52
+ "docs.nav.installation": "Installation",
53
+ "docs.nav.configuration": "Configuration",
54
+ "docs.nav.using_with_react": "Using with React",
55
+ "docs.nav.language_selector": "Language Selector",
56
+ "docs.nav.sgerp_login": "SGERP Login",
57
+ "docs.nav.sgerp_autocomplete": "SGERP Autocomplete",
58
+ "docs.nav.sgerp_multiselect": "SGERP Multiselect",
59
+ "docs.nav.sgerp_table": "SGERP Table",
60
+ "docs.nav.sgerp_map": "SGERP Map",
61
+ "docs.nav.async_cell": "Async Cell",
62
+ "docs.nav.simulation_calendar": "Simulation Calendar",
63
+ "docs.nav.simulation_filters": "Simulation Filters",
64
+ "docs.nav.track_player": "Track Player",
65
+ "docs.nav.people_transport": "People Transport",
66
+ "docs.nav.overview": "Overview",
67
+ "docs.nav.simulation_detail": "Simulation Detail",
68
+ "docs.nav.services_page": "Services Page",
69
+ "docs.nav.templates_page": "Templates Page",
70
+ "docs.nav.drivers_page": "Drivers Page",
71
+ "docs.nav.notifications_page": "Notifications Page",
72
+ "docs.nav.passengers_page": "Passengers Page",
73
+ "docs.nav.passenger_detail": "Passenger Detail",
74
+ "docs.nav.project_table": "Project Table",
75
+ "docs.nav.vehicletype_table": "Vehicle Type Table",
76
+ "docs.nav.vehicle_table": "Vehicle Table",
77
+ "docs.nav.booking_table": "Booking Table",
78
+ "docs.nav.passenger_table": "Passenger Table",
79
+ "docs.nav.ticket_table": "Ticket Table",
80
+ "docs.nav.node_table": "Node Table",
81
+ "docs.nav.driver_table": "Driver Table",
82
+ "docs.nav.operationslocation_table": "Operations Location Table",
83
+ "docs.nav.operationslocationgroup_table": "Operations Location Group Table",
84
+ "docs.nav.transaction_table": "Transaction Table",
85
+ "docs.nav.simulation_table": "Simulation Table",
86
+ "docs.nav.notifications_table": "Notifications Table",
87
+ "docs.nav.services_table": "Services Table",
88
+ "docs.nav.templates_table": "Templates Table",
89
+ "docs.nav.project_editor": "Project Editor",
90
+ "docs.nav.vehicletype_editor": "Vehicle Type Editor",
91
+ "docs.nav.driver_drawer": "Driver Drawer",
92
+ "docs.nav.notification_drawer": "Notification Drawer",
93
+ "docs.nav.connections": "Connections",
94
+ "docs.nav.collections": "Collections",
95
+ "docs.nav.user_api": "User API",
96
+ "docs.nav.project_api": "Project API",
97
+ "docs.nav.projectmember_api": "Project Member API",
98
+ "docs.nav.passenger_api": "Passenger API",
99
+ "docs.nav.simulation_api": "Simulation API",
100
+ "docs.nav.booking_api": "Booking API",
101
+ "docs.nav.node_api": "Node API",
102
+ "docs.nav.driver_api": "Driver API",
103
+ "docs.nav.vehicle_api": "Vehicle API",
104
+ "docs.nav.vehicletype_api": "Vehicle Type API",
105
+ // Docs Headings
106
+ "docs.interactive_examples": "Interactive Examples",
107
+ "docs.interactive_react_example": "Interactive React Example",
108
+ "docs.live_example": "Live Example",
109
+ "docs.on_this_page": "On This Page",
110
+ "docs.installation": "Installation",
111
+ "docs.installation_manual": "Or copy the component manually from the registry.",
112
+ // Interactive Demo
113
+ "interactive_demo.title": "Try It Out",
114
+ "interactive_demo.description": "Test the library by connecting to the SGERP API with your credentials.",
115
+ "interactive_demo.environment": "Environment",
116
+ "interactive_demo.username": "Username",
117
+ "interactive_demo.password": "Password",
118
+ "interactive_demo.username_placeholder": "Enter username",
119
+ "interactive_demo.password_placeholder": "Enter password",
120
+ "interactive_demo.save_connection": "Save Connection",
121
+ "interactive_demo.test_button": "Test Connection",
122
+ "interactive_demo.testing": "Testing...",
123
+ "interactive_demo.error_credentials": "Please enter both username and password",
124
+ "interactive_demo.error_load_projects": "Failed to load projects",
125
+ "interactive_demo.success": "Authentication Successful",
126
+ "interactive_demo.failed": "Authentication Failed",
127
+ "interactive_demo.email": "Email",
128
+ "interactive_demo.full_name": "Full Name",
129
+ "interactive_demo.is_superuser": "Is Superuser",
130
+ "interactive_demo.is_active": "Is Active",
131
+ "interactive_demo.user_id": "User ID",
132
+ "interactive_demo.projects": "Projects",
133
+ "interactive_demo.all": "All",
134
+ "interactive_demo.first_20": "First 20",
135
+ "interactive_demo.shown": "shown",
136
+ "interactive_demo.load_all": "Load All",
137
+ "interactive_demo.loading": "Loading...",
138
+ "interactive_demo.code_equivalent": "Code Equivalent",
139
+ // Homepage
140
+ "homepage.title": "SGERP Frontend Library",
141
+ "homepage.subtitle": "A TypeScript library for interacting with SGERP backend APIs. Manage multiple connections, environments, and make type-safe API requests.",
142
+ "homepage.try_it_out": "Try It Out",
143
+ "homepage.get_started": "Get Started",
144
+ "homepage.documentation": "Documentation",
145
+ "homepage.feature_connection_title": "Connection Management",
146
+ "homepage.feature_connection_desc": "Store and switch between multiple user/environment profiles with ease.",
147
+ "homepage.feature_typesafe_title": "Type-Safe",
148
+ "homepage.feature_typesafe_desc": "Full TypeScript support with comprehensive type definitions.",
149
+ "homepage.feature_easy_title": "Easy to Use",
150
+ "homepage.feature_easy_desc": "Simple API with automatic authentication and error handling.",
151
+ // PT App
152
+ "ptapp.title": "PT Management",
153
+ "ptapp.login_required": "Please log in to access PT Management",
154
+ "ptapp.header": "People Transport Management",
155
+ "ptapp.back_to_docs": "← Back to Documentation",
156
+ "ptapp.nav.passengers": "Passengers",
157
+ "ptapp.nav.drivers": "Drivers",
158
+ "ptapp.nav.notifications": "Notifications",
159
+ "ptapp.nav.geofences": "Geofences",
160
+ "ptapp.nav.services": "Plans and services",
161
+ "ptapp.nav.templates": "Templates",
162
+ "ptapp.nav.pricings": "Pricing Policies",
163
+ "ptapp.nav.transitstopsets": "Transit Stop Sets",
164
+ "ptapp.nav.trips": "Trips",
165
+ "ptapp.nav.new_booking": "New Booking",
166
+ "ptapp.simulation.vehicles": "Vehicles",
167
+ "ptapp.simulation.trips": "Trips",
168
+ "ptapp.simulation.bookings": "Bookings",
169
+ "ptapp.passengers.title": "Passengers",
170
+ "ptapp.passengers.description": "Manage passenger information",
171
+ "ptapp.passengers.back_to_list": "Back to Passengers",
172
+ "ptapp.passengers.personal_info": "Personal Information",
173
+ "ptapp.passengers.bookings": "Bookings",
174
+ "ptapp.passengers.transactions": "Transactions",
175
+ "ptapp.passengers.tickets": "Tickets", "ptapp.passengers.gender": "Gender",
176
+ "ptapp.passengers.date_of_birth": "Date of birth",
177
+ "ptapp.passengers.contact_no": "Contact no.",
178
+ "ptapp.drivers.title": "Drivers",
179
+ "ptapp.drivers.description": "Manage driver information",
180
+ "ptapp.notifications.title": "Notifications",
181
+ "ptapp.notifications.description": "Scheduled SMS notifications",
182
+ "ptapp.services.title": "Plans and services",
183
+ "ptapp.services.description": "Observe future plans and running services",
184
+ "ptapp.templates.title": "Templates",
185
+ "ptapp.templates.description": "Template simulations for creating new services",
186
+ "ptapp.pricings.title": "Pricing Policies",
187
+ "ptapp.pricings.description": "Manage pricing rules and policies for your services",
188
+ "ptapp.pricings.coming_soon": "Pricing policies management coming soon",
189
+ "ptapp.transitstopsets.title": "Transit Stop Sets",
190
+ "ptapp.transitstopsets.description": "Manage transit stop sets and filters",
191
+ // Logistics App
192
+ "logapp.title": "Logistics App",
193
+ "logapp.login_required": "Please log in to access Logistics App",
194
+ "logapp.header": "Logistics App",
195
+ "logapp.back_to_docs": "← Back to Documentation",
196
+ "logapp.nav.plans": "Plans and services",
197
+ "logapp.nav.planning": "Planning",
198
+ "logapp.nav.templates": "Templates",
199
+ "logapp.nav.vehicletypes": "Vehicle Types",
200
+ "logapp.nav.drivers": "Drivers",
201
+ "logapp.nav.geofences": "Geofences",
202
+ "logapp.nav.locations": "Locations",
203
+ "logapp.nav.locationgroups": "Location Groups",
204
+ "logapp.vehicletypes.title": "Vehicle Types",
205
+ "logapp.vehicletypes.description": "Manage vehicle type configurations and capacity settings",
206
+ "logapp.drivers.title": "Drivers",
207
+ "logapp.drivers.description": "Manage driver information",
208
+ "logapp.locations.title": "Locations",
209
+ "logapp.locations.description": "Manage operations locations and delivery points",
210
+ "logapp.locationgroups.title": "Location Groups",
211
+ "logapp.locationgroups.description": "Organize locations into logical groups",
212
+ // Location Editor
213
+ "location.create_title": "Create Location",
214
+ "location.edit_title": "Edit Location",
215
+ "location.name_placeholder": "Enter location name",
216
+ "location.code_placeholder": "Enter location code",
217
+ "location.external_id_placeholder": "Enter external ID",
218
+ "location.address_placeholder": "Enter address",
219
+ "location.postal_code_placeholder": "Enter postal code",
220
+ "location.latitude": "Latitude",
221
+ "location.longitude": "Longitude",
222
+ "location.latitude_placeholder": "e.g. 35.6762",
223
+ "location.longitude_placeholder": "e.g. 139.6503",
224
+ "location.coordinates": "Coordinates",
225
+ "location.map_label": "Location on Map",
226
+ "location.map_instructions": "Click on the map to place the marker, drag the marker to adjust, or enter coordinates manually",
227
+ "location.duplicate_external_id_error": "A location with this external ID already exists in this project. Please use a different external ID or leave it blank.",
228
+ "location.calculation_params": "Calculation Parameters",
229
+ "location.enter_time_fixed": "Enter Time (fixed)",
230
+ "location.exit_time_fixed": "Exit Time (fixed)",
231
+ "location.service_time_fixed": "Service Time (fixed)",
232
+ "location.time_placeholder": "Time in seconds",
233
+ "location.coefficients": "Coefficients (Product Kind → Demand Type → Value)",
234
+ "location.product_kind": "Product Kind",
235
+ "location.product_kind_placeholder": "e.g. passenger, cargo",
236
+ "location.demand_type": "Demand Type",
237
+ "location.demand_type_placeholder": "e.g. standard, priority",
238
+ "location.coefficient": "Coefficient",
239
+ "location.no_coefficients": "No coefficients defined. Add using the form above.",
240
+ "location.enable_cumulative_limitation": "Enable Cumulative Limitation",
241
+ "location.depot_service_time": "Depot Service Time",
242
+ "location.max_cumulative_vehicles": "Max Cumulative Vehicles",
243
+ "location.vehicles_placeholder": "Number of vehicles",
244
+ "location.import_title": "Import Operations Locations",
245
+ "location.import_select_project": "Select a project to start importing locations",
246
+ "location.import_description": "Upload a CSV file with location data",
247
+ "location.import_preview": "Review and edit locations before importing",
248
+ "location.import_uploading": "Creating locations...",
249
+ "location.import_complete": "Import complete",
250
+ "location.import_format": "Format: project_id,group_id,name,code,external_id,postal_code,lat,lon,address",
251
+ "location.locations": "locations",
252
+ "location.locations_created": "locations created",
253
+ // Location Group Editor
254
+ "locationgroup.create_title": "Create Location Group",
255
+ "locationgroup.edit_title": "Edit Location Group",
256
+ "locationgroup.view_title": "Location Group",
257
+ "locationgroup.code_placeholder": "Enter group code",
258
+ "locationgroup.available_locations": "Available Locations",
259
+ "locationgroup.selected_locations": "Locations of this Group",
260
+ "locationgroup.select_locations_instruction": "Select locations to add to this group",
261
+ "locationgroup.select_project_first": "Select a project to view available locations",
262
+ "locationgroup.no_locations_selected": "No locations selected",
263
+ // Common
264
+ "common.loading": "Loading...",
265
+ "common.loading_data": "Loading data...",
266
+ "common.loading_routes": "Loading routes...",
267
+ "common.calculating": "Calculating",
268
+ "common.show": "Show",
269
+ "common.hide": "Hide",
270
+ "common.show_all": "Show All",
271
+ "common.hide_all": "Hide All",
272
+ "common.show_map": "Show Map",
273
+ "common.hide_map": "Hide Map",
274
+ "common.timeline": "Timeline",
275
+ "common.route_timeline": "Route Timeline",
276
+ "common.selected": "selected",
277
+ "common.no_route": "No route",
278
+ "common.no_data": "No data available",
279
+ "common.not_available": "N/A",
280
+ "common.save": "Save",
281
+ "common.saving": "Saving...",
282
+ "common.cancel": "Cancel",
283
+ "common.delete": "Delete",
284
+ "common.add": "Add",
285
+ "common.edit": "Edit",
286
+ "common.custom": "Custom...",
287
+ "common.create": "Create",
288
+ "common.creating": "Creating...",
289
+ "common.update": "Update",
290
+ "common.search": "Search",
291
+ "common.filter": "Filter",
292
+ "common.done": "Done",
293
+ "common.clear": "Clear",
294
+ "common.clear_all": "Clear All",
295
+ "common.select": "Select...",
296
+ "common.apply": "Apply",
297
+ "common.close": "Close",
298
+ "common.change": "Change",
299
+ "common.yes": "Yes",
300
+ "common.no": "No",
301
+ "common.ok": "OK",
302
+ "common.error": "Error",
303
+ "common.success": "Success",
304
+ "common.warning": "Warning",
305
+ "common.info": "Information",
306
+ "common.active": "Active",
307
+ "common.inactive": "Inactive",
308
+ "common.password": "Password",
309
+ "common.remove": "Remove",
310
+ "common.logout": "Logout",
311
+ "common.save_failed": "Failed to save",
312
+ "common.pause": "Pause",
313
+ "common.resume": "Resume",
314
+ "common.pausing": "Pausing...",
315
+ "common.resuming": "Resuming...",
316
+ "common.paused": "Paused",
317
+ "common.accepting": "Accepting",
318
+ "common.updating": "Updating...",
319
+ "common.accepting_bookings": "Accepting Bookings",
320
+ "common.live": "Live",
321
+ "common.project": "Project",
322
+ "common.simulation": "Simulation",
323
+ "common.project_required": "Project is required",
324
+ "common.simulation_required": "Simulation is required",
325
+ "common.select_project": "Select a project",
326
+ "common.select_simulation": "Select a simulation",
327
+ "common.pick_date": "Pick a date",
328
+ "common.import": "Import",
329
+ "common.back": "Back",
330
+ "common.continue": "Continue",
331
+ "common.vehicle_singular": "vehicle",
332
+ "common.vehicle_plural": "vehicles",
333
+ "common.vehicles": "vehicles",
334
+ "common.bookings": "bookings",
335
+ "common.help": "Help",
336
+ "common.keyboard_shortcuts": "Keyboard Shortcuts",
337
+ // Autoplan Confirmation Dialog
338
+ "autoplan.title": "Auto-plan orders and vehicles",
339
+ "autoplan.vehicle_selection": "Vehicle Selection",
340
+ "autoplan.order_selection": "Order Selection",
341
+ "autoplan.all_vehicles": "All vehicles",
342
+ "autoplan.selected_vehicles": "Selected vehicles",
343
+ "autoplan.all_orders": "All orders",
344
+ "autoplan.selected_orders": "Selected orders",
345
+ "autoplan.summary": "Summary",
346
+ "autoplan.assign_orders_short": "Assign {count} order{plural} to {vehicles} vehicle{vehiclePlural}",
347
+ "autoplan.optimize_sequences": "Optimize stop sequences",
348
+ "autoplan.this_action_will": "This action will:",
349
+ "autoplan.assign_orders": "Assign {unassigned} unassigned order{plural} to {vehicles} vehicle{vehiclePlural}",
350
+ "autoplan.optimize_sequence": "Optimize the stops sequence for {vehicles} vehicle{vehiclePlural}",
351
+ "autoplan.warning_title": "Warning",
352
+ "autoplan.warning_message": "Manual edits may be overwritten. This action cannot be undone.",
353
+ "autoplan.button": "Auto-plan",
354
+ "autoplan.button_running": "Auto-planning...",
355
+ // Calculation/Processor
356
+ "processor.calculating_by": "Calculating by {username}",
357
+ "processor.history_title": "Calculation History",
358
+ "processor.total_calculations": "{count} total calculation{plural}",
359
+ // Keyboard Shortcuts Help
360
+ "shortcuts.view_history": "View Calculation History",
361
+ "shortcuts.view_history_desc": "Toggle processor history drawer",
362
+ "shortcuts.launch_autoplan": "Launch Autoplan",
363
+ "shortcuts.launch_autoplan_desc": "Start route optimization",
364
+ "shortcuts.modifier_key_mac": "⌘ = Command key on Mac",
365
+ "shortcuts.modifier_key_windows": "Ctrl+ = Control key on Windows/Linux",
366
+ // Driver Assignment
367
+ "driverAssignment.title": "Driver Assignment",
368
+ "driverAssignment.placeholder": "Driver assignment interface will be implemented here.",
369
+ "driverAssignment.assign": "Assign",
370
+ "driverAssignment.saveChanges": "Save Changes in Plan",
371
+ "driverAssignment.timeViolation": "Time overlap detected! Cannot assign driver to overlapping trips.",
372
+ // Vehicle
373
+ "vehicle.pause_bookings_title": "Pause bookings?",
374
+ "vehicle.pause_bookings_message_prefix": "You are about to pause all bookings for Service number:",
375
+ "vehicle.pause_bookings_message_suffix": "The vehicle will finish existing assignments on hand but will no longer receive any more assignments until this action is reversed.",
376
+ "vehicle.pause_bookings_button": "Pause bookings",
377
+ "vehicle.resume_bookings_title": "Resume bookings?",
378
+ "vehicle.resume_bookings_message_prefix": "You are about to resume all bookings for Service number:",
379
+ "vehicle.resume_bookings_message_suffix": "The vehicle will start receiving assignments from the system.",
380
+ "vehicle.resume_bookings_button": "Resume bookings",
381
+ "vehicle.info_title": "Vehicle Information",
382
+ "vehicle.info_description": "View vehicle details and location",
383
+ "vehicle.gps_coordinates": "GPS Coordinates",
384
+ "vehicle.no_data": "No vehicle data available",
385
+ "vehicle.create_vehicle": "Create Vehicle",
386
+ "vehicle.manage_vehicles": "Manage Vehicles",
387
+ "vehicle.unassign": "Unassign",
388
+ "vehicle.bulk_create_vehicles": "Bulk Create Vehicles",
389
+ "vehicle.vehicles_list": "Vehicles",
390
+ "vehicle.vehicles_description": "Drop drivers and geofences here",
391
+ "vehicle.add_vehicle": "Add Vehicle",
392
+ "vehicle.unnamed": "Unnamed Vehicle",
393
+ "vehicle.select_or_add": "Select a vehicle or add a new one",
394
+ "vehicle.save_all_vehicles": "Save All Vehicles",
395
+ "vehicle.shared_routing_settings": "Shared Routing Settings (applies to all vehicles)",
396
+ "vehicle.no_geofences_assigned": "No geofences assigned. Drag from left sidebar.",
397
+ "vehicle.service_number": "Service Number",
398
+ "vehicle.service_number_required": "Service number is required",
399
+ "vehicle.service_number_placeholder": "Enter service number (e.g., V001)",
400
+ "vehicle.registration_number": "Registration Number",
401
+ "vehicle.registration_number_placeholder": "Enter registration number (e.g., ABC-123)",
402
+ "vehicle.vehicle_type": "Vehicle Type",
403
+ "vehicle.select_vehicle_type": "Select a vehicle type",
404
+ "vehicle.start_time": "Start Time",
405
+ "vehicle.end_time": "End Time",
406
+ "vehicle.color": "Color",
407
+ "vehicle.created_successfully": "Vehicle created successfully",
408
+ "vehicle.create_failed": "Failed to create vehicle",
409
+ "vehicle.driver": "Driver",
410
+ "vehicle.select_driver": "Select a driver",
411
+ "vehicle.speed": "Speed",
412
+ "vehicle.vehicle_cost": "Vehicle Cost",
413
+ "vehicle.max_trip_duration": "Max Trip Duration",
414
+ "vehicle.capacity": "Capacity",
415
+ "vehicle.capacity_key": "Capacity Key",
416
+ "vehicle.add_capacity": "Add Capacity",
417
+ "vehicle.geofences": "Geofences",
418
+ "vehicle.select_geofences": "Select geofences",
419
+ "vehicle.assign_to_all": "Assign to all",
420
+ "vehicle.applied_to_all": "Applied to all vehicles",
421
+ "vehicle.in_simulation": "in Simulation",
422
+ "vehicle.in_template": "in Template",
423
+ "vehicle.of_project": "of project",
424
+ "vehicle.vehicle": "Vehicle",
425
+ "vehicle.vehicle_details": "Vehicle Details",
426
+ // Driver
427
+ "driver.create_driver": "Create Driver",
428
+ "driver.create_description": "Create a new driver account with user credentials",
429
+ "driver.view_driver": "View Driver",
430
+ "driver.view_description": "Driver account details",
431
+ "driver.edit_driver": "Edit Driver",
432
+ "driver.edit_description": "Manage driver projects and settings",
433
+ "driver.name_placeholder": "Enter driver name",
434
+ "driver.login_placeholder": "Enter login username",
435
+ "driver.password_placeholder": "Enter password",
436
+ "driver.confirm_password": "Confirm Password",
437
+ "driver.select_driver": "Select driver",
438
+ "driver.confirm_password_placeholder": "Re-enter password",
439
+ "driver.projects": "Projects",
440
+ "driver.add_project_placeholder": "Search and add project...",
441
+ "driver.no_projects": "No projects assigned",
442
+ "driver.change_password": "Change Password",
443
+ "driver.new_password": "New Password",
444
+ "driver.new_password_placeholder": "Enter new password",
445
+ "driver.confirm_new_password": "Confirm New Password",
446
+ "driver.confirm_new_password_placeholder": "Re-enter new password",
447
+ "driver.update_password": "Update Password",
448
+ // Error messages
449
+ "error.organization_required": "Organization is required",
450
+ "error.name_required": "Name is required",
451
+ "error.login_required": "Login is required",
452
+ "error.password_required": "Password is required",
453
+ "error.password_mismatch": "Passwords do not match",
454
+ "error.driver_not_found": "Driver not found",
455
+ "error.driver_load_failed": "Failed to load driver",
456
+ "error.project_add_failed": "Failed to add project",
457
+ "error.project_remove_failed": "Failed to remove project",
458
+ // Table
459
+ "table.no_results": "No data available",
460
+ "table.loading": "Loading...",
461
+ "table.columns": "Columns",
462
+ "table.rows_per_page": "Rows per page",
463
+ "table.page_of": "Page {current} of {total}",
464
+ "table.select_all": "Select all",
465
+ "table.deselect_all": "Deselect all",
466
+ "table.showing_items": "Showing {showing} of {total} items",
467
+ "table.more_available": "(more available)",
468
+ "table.clear_filters": "Clear filters",
469
+ "table.loading_more": "Loading more...",
470
+ // Common table columns
471
+ "column.id": "ID",
472
+ "column.name": "Name",
473
+ "column.created": "Created",
474
+ "column.modified": "Modified",
475
+ "column.project_id": "Project ID",
476
+ "column.project": "Project",
477
+ "column.simulation_id": "Simulation ID",
478
+ "column.simulation": "Simulation",
479
+ "column.status": "Status",
480
+ "column.filter_expression": "Filter Expression",
481
+ "column.exclude_expression": "Exclude Expression",
482
+ "column.start_time": "Start Time",
483
+ "column.end_time": "End Time",
484
+ "column.mileage": "Mileage",
485
+ "column.travel_time": "Travel Time",
486
+ "column.service_number": "Service Number",
487
+ "column.color": "Color",
488
+ "column.gps_modified": "GPS Modified",
489
+ "column.latitude": "Latitude",
490
+ "column.longitude": "Longitude",
491
+ "column.capacity": "Capacity",
492
+ "column.labels": "Labels",
493
+ "column.vehicle_cost": "Vehicle Cost",
494
+ "column.mode": "Mode",
495
+ "column.timezone": "Timezone",
496
+ "column.real_operations": "Real Operations",
497
+ "column.template": "Template",
498
+ "column.actions": "Actions",
499
+ "column.login": "Login",
500
+ "column.first_name": "First Name",
501
+ "column.organization": "Organization",
502
+ "column.activity": "Activity",
503
+ "column.strategy": "Strategy",
504
+ "column.currency": "Currency",
505
+ "column.type": "Type",
506
+ "column.booking": "Booking",
507
+ "column.username": "Username",
508
+ "column.email": "Email",
509
+ "column.phone": "Phone",
510
+ "column.active": "Active",
511
+ "column.driver": "Driver",
512
+ "column.first_stop": "First Stop",
513
+ "column.last_stop": "Last Stop",
514
+ "column.trips": "Trips",
515
+ "column.route": "Route",
516
+ "column.route_trip": "Route Trip",
517
+ "column.shape_id": "Shape ID",
518
+ "column.pickup_time": "Pickup Time",
519
+ "column.bookings_total": "Total",
520
+ "column.bookings_assigned": "Assigned",
521
+ "column.bookings_enroute": "Enroute",
522
+ "column.bookings_completed": "Completed",
523
+ "column.external_id": "External ID",
524
+ "column.code": "Code",
525
+ "column.address": "Address",
526
+ "column.postal_code": "Postal Code",
527
+ "column.coordinates": "Coordinates",
528
+ "column.group": "Group",
529
+ "column.key": "Key",
530
+ "column.description": "Description",
531
+ // Filter labels
532
+ "filter.all": "All",
533
+ "filter.all_statuses": "All Statuses",
534
+ "filter.project": "Project",
535
+ "filter.simulation": "Simulation",
536
+ "filter.organization": "Organization",
537
+ "filter.template": "Template",
538
+ "filter.status": "Status",
539
+ "filter.mode": "Mode",
540
+ "filter.recipient_type": "Recipient Type",
541
+ "filter.delivery_type": "Delivery Type",
542
+ // Filter placeholders
543
+ "filter.placeholder_project": "Filter by project...",
544
+ "filter.placeholder_simulation": "Filter by simulation...",
545
+ "filter.placeholder_organization": "Filter by organization...",
546
+ "filter.placeholder_template": "Filter by templates...",
547
+ "filter.placeholder_group": "Filter by group...",
548
+ "filter.activity": "Activity",
549
+ "filter.activity_all": "All",
550
+ "filter.activity_current": "Current",
551
+ "filter.activity_future": "Future",
552
+ "filter.activity_past": "Past",
553
+ "filter.activity_booking_started": "Booking Started, Future",
554
+ "filter.date": "Date",
555
+ // SMS/Notification specific columns
556
+ "column.date": "Date",
557
+ "column.created_at": "Created At",
558
+ "column.modified_at": "Modified At",
559
+ "column.gps_modified_at": "GPS Modified At",
560
+ "column.registration_number": "Registration Number",
561
+ "column.lat": "Latitude",
562
+ "column.lon": "Longitude",
563
+ "column.message": "Message",
564
+ "column.recipient": "Recipient",
565
+ "column.recipient_type": "Recipient Type",
566
+ "column.created_by": "Created By",
567
+ "column.delivery_type": "Delivery Type",
568
+ "column.scheduled_at": "Scheduled At",
569
+ // Recipient types
570
+ "recipient_type.delivery_client": "Delivery Client",
571
+ "recipient_type.delivery_group": "Delivery Group",
572
+ "recipient_type.organization": "Organization",
573
+ "recipient_type.passenger": "Passenger",
574
+ "recipient_type.passenger_group": "Passenger Group",
575
+ // Booking specific
576
+ "column.booking_start": "Booking Start",
577
+ "column.booking_end": "Booking End",
578
+ "column.dropoff_time": "Dropoff Time",
579
+ "column.pickup_location": "Pickup Location",
580
+ "column.dropoff_location": "Dropoff Location",
581
+ "column.min_pickup_time": "Min Pickup",
582
+ "column.max_pickup_time": "Max Pickup",
583
+ "column.min_dropoff_time": "Min Dropoff",
584
+ "column.max_dropoff_time": "Max Dropoff",
585
+ "column.scheduled_pickup": "Scheduled Pickup",
586
+ "column.scheduled_dropoff": "Scheduled Dropoff",
587
+ "column.demand": "Demand",
588
+ "column.vehicle": "Vehicle",
589
+ "column.vehicle_id": "Vehicle ID",
590
+ "column.location": "Location",
591
+ "column.scheduled": "Scheduled",
592
+ "filter.vehicle": "Vehicle",
593
+ // Dialog texts
594
+ "dialog.unassign_orders_title": "Unassign {count} order{plural}?",
595
+ "dialog.unassign_orders_description": "All {count} selected order{plural} will be unassigned from their vehicles.",
596
+ "dialog.unassign_orders_from_vehicles_title": "Unassign all orders from {count} {vehicle}?",
597
+ "dialog.unassign_orders_from_vehicles_description": "All {orderCount} orders will be unassigned from the {vehicleCount} selected {vehicle}.",
598
+ "dialog.unassign_warning": "This action cannot be reversed. Orders can be reassigned, but the new assignment may differ from the original.",
599
+ "dialog.unassigning": "Unassigning...",
600
+ // Toast notifications
601
+ "toast.autoplan_success": "Autoplan started successfully!",
602
+ "toast.autoplan_success_description": "The optimization is running in the background.",
603
+ "toast.autoplan_error": "Autoplan failed",
604
+ "toast.unassign_from_vehicles_success": "Bookings unassigned successfully!",
605
+ "toast.unassign_from_vehicle_singular_description": "All bookings have been removed from this vehicle.",
606
+ "toast.unassign_from_vehicles_plural_description": "All bookings have been removed from {count} vehicles.",
607
+ "toast.unassign_error": "Failed to unassign bookings",
608
+ "toast.unassign_orders_success": "Orders unassigned successfully!",
609
+ "toast.unassign_order_singular_description": "The order has been unassigned from its vehicle.",
610
+ "toast.unassign_orders_plural_description": "{count} orders have been unassigned from their vehicles.",
611
+ "toast.unassign_orders_error": "Failed to unassign orders",
612
+ // Route Details
613
+ "route_details.select_vehicle": "Select a vehicle to view route details",
614
+ "route_details.loading": "Loading route...",
615
+ "route_details.waypoints": "waypoints",
616
+ "route_details.waypoint": "waypoint",
617
+ "route_details.nodes": "Nodes",
618
+ "route_details.node_id": "Node {id}",
619
+ "route_details.view_playback": "GPS Playback",
620
+ "route_details.edit": "Edit",
621
+ "route_details.route_change_prohibited": "Route change prohibited",
622
+ "route_details.pickup_dropoff_violation": "Cannot place dropoff before pickup for the same booking",
623
+ "route_details.start_time": "First Waypoint Scheduled Time",
624
+ "route_details.set_vehicle_start": "Vehicle Start",
625
+ "route_details.set_vehicle_start_tooltip": "Set start time to vehicle's start_time. All node times will shift to maintain intervals.",
626
+ "route_details.set_booking_min": "Booking Min Pickup",
627
+ "route_details.set_booking_min_tooltip": "Set start time to earliest open_time_ts from first waypoint nodes. All node times will shift accordingly.",
628
+ "route_details.set_current_time": "Current Time",
629
+ "route_details.set_current_time_tooltip": "Set start time to current time. All node times will shift to maintain intervals.",
630
+ "route_details.vehicle_no_agent_id": "Vehicle does not have an agent ID",
631
+ "route_details.save_not_committed": "Route changes were not committed",
632
+ "route_details.save_failed": "Failed to save route changes",
633
+ "route_details.distance_km": "{distance} km",
634
+ "route_details.duration_hours_minutes": "{hours}h {minutes}m",
635
+ // Node Types
636
+ "node_type.pickup": "Pickup",
637
+ "node_type.dropoff": "Dropoff",
638
+ "node_type.point": "Point",
639
+ "node_type.vehicle_position": "Vehicle Position",
640
+ "node_type.depot": "Depot",
641
+ // JIT Shifts
642
+ "jit_shifts.title": "JIT Shifts",
643
+ "jit_shifts.shift": "Shift",
644
+ "jit_shifts.time": "Time",
645
+ "jit_shifts.batch": "Batch",
646
+ "jit_shifts.bookings": "Bookings",
647
+ "jit_shifts.allocated": "Allocated",
648
+ "jit_shifts.used": "Used",
649
+ "jit_shifts.active": "Active",
650
+ "jit_shifts.processed": "Processed",
651
+ // Demand types
652
+ "demand.passenger": "Passenger",
653
+ "demand.passenger_child": "Child",
654
+ "demand.passenger_baby": "Baby",
655
+ "demand.wheelchair": "Wheelchair",
656
+ "demand.wheelchair_child": "Wheelchair (Child)",
657
+ "demand.total": "Total",
658
+ "demand.click_details": "Click for details",
659
+ "demand.expand_all": "Expand all demand details",
660
+ "demand.collapse_all": "Collapse all demand details",
661
+ // Booking states
662
+ "booking_state.unassigned": "Unassigned",
663
+ "booking_state.assigned": "Assigned",
664
+ "booking_state.calculating": "Calculating",
665
+ "booking_state.calculation": "Calculation",
666
+ "booking_state.cancelled_by_user": "Cancelled by User",
667
+ "booking_state.cancelled_in_calc": "Cancelled in Calculation",
668
+ "booking_state.completed": "Completed",
669
+ "booking_state.enroute": "En Route",
670
+ "booking_state.fail_to_board": "Failed to Board",
671
+ "booking_state.fail_to_deliver": "Failed to Deliver",
672
+ "booking_state.linked": "Linked",
673
+ "booking_state.new": "New",
674
+ "booking_state.pooling": "Pooling",
675
+ "booking_state.prepared": "Prepared",
676
+ "booking_state.queued": "Queued",
677
+ "booking_state.rejected_by_system": "No offer",
678
+ "booking_state.sent_offer": "Sent Offer",
679
+ "booking_state.all_cancelled": "All Cancelled",
680
+ // Driver specific
681
+ "column.access_to_projects": "Access to Projects",
682
+ // Project specific
683
+ "column.bookings_opened": "Bookings Opened",
684
+ "column.is_currently_operation_time": "Is currently operation time",
685
+ "filter.timezone": "Timezone",
686
+ "filter.placeholder_timezone": "Filter by timezone",
687
+ "project.edit_project": "Edit Project",
688
+ "project.loading": "Loading project...",
689
+ "project.name_label": "Name",
690
+ "project.name_placeholder": "Project name",
691
+ "project.timezone_label": "Timezone",
692
+ "project.timezone_placeholder": "Select timezone",
693
+ "project.timezone_help": "Timezone for date/time calculations",
694
+ "project.external_id_label": "External ID",
695
+ "project.external_id_placeholder": "External identifier",
696
+ "project.external_id_help": "Used for importing from external sources",
697
+ "project.latitude_label": "Latitude",
698
+ "project.longitude_label": "Longitude",
699
+ "project.location_help": "Default location for map view",
700
+ "project.saving": "Saving...",
701
+ "project.update_button": "Update Project",
702
+ "project.create_button": "Create Project",
703
+ "project.cancel_button": "Cancel",
704
+ "project.not_found": "Project not found",
705
+ "project.load_failed": "Failed to load project",
706
+ "project.save_failed": "Failed to save project",
707
+ "project.refresh_failed": "Failed to refresh project data",
708
+ // VehicleType specific
709
+ "filter.name": "Name",
710
+ "vehicletype.create_button": "Create Vehicle Type",
711
+ "vehicletype.edit_vehicletype": "Edit Vehicle Type",
712
+ "vehicletype.loading": "Loading vehicle type...",
713
+ "vehicletype.not_found": "Vehicle Type not found",
714
+ "vehicletype.load_failed": "Failed to load vehicle type",
715
+ "vehicletype.save_failed": "Failed to save vehicle type",
716
+ "vehicletype.name_label": "Name",
717
+ "vehicletype.name_placeholder": "Vehicle type name (no spaces)",
718
+ "vehicletype.name_description": "A unique identifier for this vehicle type (e.g., van, truck, bike).",
719
+ "vehicletype.name_no_spaces_hint": "Spaces are automatically removed.",
720
+ "vehicletype.project_label": "Project",
721
+ "vehicletype.project_placeholder": "Select project...",
722
+ "vehicletype.project_description": "Project to which the vehicle type belongs",
723
+ "vehicletype.capacity_label": "Capacity",
724
+ "vehicletype.capacity_add": "Add",
725
+ "vehicletype.capacity_empty": "No capacity constraints. Click \"Add\" to create one.",
726
+ "vehicletype.capacity_description": "Key-value pairs for capacity dimensions (e.g., passenger: 4, wheelchair: 2)",
727
+ "vehicletype.capacity_custom_placeholder": "Custom key (e.g. luggage)",
728
+ "vehicletype.capacity_custom_option": "Custom...",
729
+ "vehicletype.capacity_value_placeholder": "0",
730
+ "vehicletype.vehicle_cost_label": "Vehicle Cost",
731
+ "vehicletype.vehicle_cost_placeholder": "0",
732
+ "vehicletype.max_trip_duration_label": "Max Trip Duration",
733
+ "vehicletype.max_trip_duration_placeholder": "Max trip duration",
734
+ "vehicletype.lifo_order_check_label": "LIFO Order Check",
735
+ "vehicletype.lifo_order_check_description": "Whether to check Last In First Out order",
736
+ "vehicletype.labels_label": "Labels",
737
+ "vehicletype.labels_placeholder": "Select labels...",
738
+ "vehicletype.labels_select_from_project": "Add from project labels...",
739
+ "vehicletype.labels_custom_placeholder": "Type custom label...",
740
+ "vehicletype.labels_description": "Vehicle labels for categorization (e.g., ambient, freezer)",
741
+ "vehicletype.labels_empty": "No labels available. Configure labels in the project settings.",
742
+ "vehicletype.save_button": "Save",
743
+ "vehicletype.saving_button": "Saving...",
744
+ "vehicletype.update_button": "Update Vehicle Type",
745
+ "vehicletype.cancel_button": "Cancel",
746
+ // Capacity keys
747
+ "capacity.passenger": "Passenger",
748
+ "capacity.wheelchair": "Wheelchair",
749
+ "capacity.cbcm": "m³",
750
+ "capacity.kg": "kg",
751
+ "capacity.units": "Units",
752
+ "capacity.pallet": "Pallet",
753
+ "capacity.bottles": "Bottles",
754
+ "capacity.tons": "tons",
755
+ "capacity.cbm": "m³",
756
+ // Gender options
757
+ "gender.female": "Female",
758
+ "gender.male": "Male",
759
+ "gender.others": "Others",
760
+ "gender.prefer_not_to_say": "Prefer not to say",
761
+ // Passenger
762
+ "passenger.create_passenger": "Create Passenger",
763
+ "passenger.edit_passenger": "Edit Passenger",
764
+ "passenger.create_description": "Create a new passenger account",
765
+ "passenger.edit_description": "Update passenger information",
766
+ "passenger.name_placeholder": "Enter passenger name",
767
+ "passenger.email_placeholder": "Enter email address",
768
+ "passenger.phone_placeholder": "Enter phone number",
769
+ "passenger.gender_placeholder": "Select gender",
770
+ "passenger.birth_date_placeholder": "Select date of birth",
771
+ "passenger.additional_info": "Additional Information",
772
+ "passenger.saving": "Saving...",
773
+ "passenger.create_button": "Create Passenger",
774
+ "passenger.update_button": "Update Passenger",
775
+ "error.passenger_not_found": "Passenger not found",
776
+ "error.passenger_load_failed": "Failed to load passenger",
777
+ "error.passenger_save_failed": "Failed to save passenger",
778
+ "error.passenger_refresh_failed": "Failed to refresh passenger data",
779
+ // Transaction status
780
+ "transaction_status.failure": "Failure",
781
+ "transaction_status.failure_should_retry": "Failure, should retry",
782
+ "transaction_status.success": "Success",
783
+ // Transaction type
784
+ "transaction_type.cancel": "Cancel",
785
+ "transaction_type.cancellation_penalty": "Cancellation penalty",
786
+ "transaction_type.change_demand": "Change Demand",
787
+ "transaction_type.coupon": "Coupon",
788
+ "transaction_type.credit_purchase": "Credit purchase (Not in use)",
789
+ "transaction_type.manual_credit": "Manual credit",
790
+ "transaction_type.passenger_schedule": "Passenger schedule",
791
+ "transaction_type.pay_outstanding": "Pay outstanding (Not in use)",
792
+ "transaction_type.payment": "Payment",
793
+ "transaction_type.penalty_payment": "Penalty payment (Not in use)",
794
+ "transaction_type.pickup": "Pickup",
795
+ "transaction_type.referee": "Referee",
796
+ "transaction_type.referrer": "Referrer",
797
+ "transaction_type.refund": "Refund",
798
+ "transaction_type.subscription_pass": "Subscription Pass",
799
+ "transaction_type.test": "Test",
800
+ // Transaction provider
801
+ "transaction_provider.internal": "Internal",
802
+ "transaction_provider.opal": "Opal",
803
+ "transaction_provider.stripe": "Stripe",
804
+ // Transaction currency
805
+ "transaction_currency.idr": "Indonesian rupiah",
806
+ "transaction_currency.jpy": "Japanese Yen",
807
+ "transaction_currency.php": "Philippine peso",
808
+ "transaction_currency.sgd": "Singapore dollar",
809
+ "transaction_currency.thb": "Thai Baht",
810
+ // Passenger/Transaction specific
811
+ "column.amount": "Amount",
812
+ "column.timestamp": "Timestamp",
813
+ "column.passenger": "Passenger",
814
+ "column.payment_status": "Payment Status",
815
+ "column.payment_method": "Payment Method",
816
+ "column.refunded": "Refunded",
817
+ "column.transaction_type": "Transaction Type",
818
+ "column.provider": "Provider",
819
+ "filter.payment_status": "Payment Status",
820
+ "filter.payment_method": "Payment Method",
821
+ "filter.transaction_type": "Transaction Type",
822
+ // Notifications
823
+ "notifications.title": "Notifications",
824
+ "notifications.status_scheduled": "Scheduled",
825
+ "notifications.status_sending": "Sending",
826
+ "notifications.status_sent": "Sent",
827
+ "notifications.status_cancelled": "Cancelled",
828
+ "notifications.recipient_type_delivery_client": "Delivery Client",
829
+ "notifications.recipient_type_delivery_group": "Delivery Group",
830
+ "notifications.recipient_type_organization": "Organization",
831
+ "notifications.recipient_type_passenger": "Passenger",
832
+ "notifications.recipient_type_passenger_group": "Passenger Group",
833
+ "notifications.delivery_type_push": "Push Notification",
834
+ "notifications.delivery_type_sms": "SMS",
835
+ // Notification Drawer
836
+ "notification.recipient_type_label": "Recipient Type",
837
+ "notification.recipient_organization": "Organization",
838
+ "notification.recipient_passenger": "Passenger",
839
+ "notification.organization_label": "Organization",
840
+ "notification.organization_placeholder": "Select organization...",
841
+ "notification.passenger_label": "Passenger",
842
+ "notification.passenger_placeholder": "Select passenger...",
843
+ "notification.title_label": "Title",
844
+ "notification.title_placeholder": "Notification title",
845
+ "notification.body_label": "Message",
846
+ "notification.body_placeholder": "Notification message",
847
+ "notification.url_label": "URL",
848
+ "notification.url_placeholder": "https://example.com",
849
+ "notification.send_timing_label": "Send Timing",
850
+ "notification.send_now": "Send Now",
851
+ "notification.send_later": "Schedule for Later",
852
+ "notification.timezone_label": "Timezone",
853
+ "notification.timezone_placeholder": "Select timezone",
854
+ "notification.date_label": "Date",
855
+ "notification.date_placeholder": "Pick a date",
856
+ "notification.time_label": "Time",
857
+ "notification.time_placeholder": "Select time",
858
+ "notification.creating": "Creating...",
859
+ "notification.create_button": "Create Notification",
860
+ "notification.error_select_organization": "Please select an organization",
861
+ "notification.error_select_passenger": "Please select a passenger",
862
+ "notification.error_title_required": "Title is required",
863
+ "notification.error_body_required": "Message is required",
864
+ "notification.error_datetime_required": "Date and time are required for scheduled notifications",
865
+ "notification.error_project_required": "Could not determine project from recipient",
866
+ "notification.error_refresh_failed": "Failed to refresh notification data",
867
+ "notification.error_create_failed": "Failed to create notification",
868
+ "notification.preview_now": "now",
869
+ "notification.preview_title": "Notification Title",
870
+ "notification.preview_body": "Notification message will appear here...",
871
+ "notification.preview_app_name": "PT App",
872
+ "notification.preview_app_icon": "PT",
873
+ // Template Drawer
874
+ "template.create_title": "Create Template",
875
+ "template.create_description": "Create a new simulation template",
876
+ "template.create_button": "Create Template",
877
+ "template.type_label": "Template Type",
878
+ "template.type_jit": "JIT",
879
+ "template.type_on-demand": "On-demand",
880
+ "template.project_label": "Project",
881
+ "template.project_placeholder": "Search projects...",
882
+ "template.geofence_label": "Geofence",
883
+ "template.geofence_placeholder": "Select geofence...",
884
+ "template.geofences_zones_label": "Additional Geofences",
885
+ "template.geofences_zones_placeholder": "Select additional geofences...",
886
+ "template.pickup_stops_label": "Pickup Stops Set",
887
+ "template.pickup_stops_placeholder": "Select pickup stops set...",
888
+ "template.dropoff_stops_label": "Dropoff Stops Set",
889
+ "template.dropoff_stops_placeholder": "Select dropoff stops set...",
890
+ "template.pricing_label": "Pricing",
891
+ "template.pricing_placeholder": "Select pricing...",
892
+ "template.name_label": "Template Name",
893
+ "template.name_placeholder": "Enter template name",
894
+ "template.routing_profile_label": "Vehicle Routing Profile",
895
+ "template.routing_profile_placeholder": "Select routing profile...",
896
+ "template.map_token": "Vehicle Routing Map Token",
897
+ "template.select_map_token": "Select map token...",
898
+ "template.walking_profile_label": "Walking Routing Profile",
899
+ // Routing Engine Settings
900
+ "routing_settings.advanced_settings": "Advanced Routing Settings",
901
+ "routing_settings.key": "API Key",
902
+ "routing_settings.url": "Routing Service URL",
903
+ "routing_settings.speed": "Default Speed",
904
+ "routing_settings.time_factor": "Time Factor",
905
+ "routing_settings.road_network": "Road Network",
906
+ "routing_settings.routing_engine_name": "Routing Engine",
907
+ "routing_settings.profile": "Routing Profile",
908
+ "routing_settings.mapmatcher_radius": "Mapmatcher Radius",
909
+ "routing_settings.make_depot_zero": "Make Depot Zero",
910
+ "routing_settings.use_speed_in_routing": "Use Speed in Routing",
911
+ "routing_settings.disable_curb_for_destination_navigation": "Disable Curb for Destination",
912
+ "routing_settings.intermediate_curb": "Intermediate Curb",
913
+ "routing_settings.add_optional_field": "Add Optional Field",
914
+ "template.walking_profile_placeholder": "Select walking profile...",
915
+ "template.qos_parameters_label": "QoS Parameters",
916
+ "template.qos_extended_parameters_label": "QoS & Extended Parameters",
917
+ "template.qos_section_title": "Quality of Service",
918
+ "template.extended_section_title": "Extended Parameters",
919
+ "template.algo_type_label": "Algorithm Type",
920
+ "template.algo_type_dynamic": "Dynamic",
921
+ "template.algo_type_static": "Static",
922
+ "template.max_additional_journey_time_label": "Max Additional Journey Time",
923
+ "template.max_additional_journey_time_percent_label": "Max Additional Journey Time %",
924
+ "template.min_advance_booking_window_label": "Min Advance Booking Window",
925
+ "template.max_advance_booking_window_label": "Max Advance Booking Window",
926
+ "template.max_walking_distance_label": "Max Walking Distance",
927
+ "template.acceptable_waiting_time_label": "Acceptable Waiting Time",
928
+ "template.seconds_unit": "seconds",
929
+ "template.percent_unit": "%",
930
+ "template.meters_unit": "meters",
931
+ "template.start_time_label": "Start Time",
932
+ "template.start_time_placeholder": "Select start time",
933
+ "template.end_time_label": "End Time",
934
+ "template.end_time_placeholder": "Select end time",
935
+ "template.end_time_next_day": "+1 Day",
936
+ "template.booking_time_range_label": "Booking Time Range",
937
+ "template.booking_time_range_description": "Optional time window for accepting bookings. If not set, defaults to service time range.",
938
+ "template.booking_start_time_label": "Booking Start Time",
939
+ "template.booking_end_time_label": "Booking End Time",
940
+ "template.booking_days_before_suffix": "days before",
941
+ "template.booking_days_after_suffix": "days after",
942
+ "template.error_invalid_booking_time": "Invalid Booking Time Range",
943
+ "template.error_booking_end_before_start": "Booking end time cannot be earlier than booking start time",
944
+ "template.shifts_title": "Shifts",
945
+ "template.add_shift": "Add Shift",
946
+ "template.delete_shift_title": "Delete Shift",
947
+ "template.delete_shift_confirm": "Do you really want to delete this shift?",
948
+ "template.shift_type_label": "Type",
949
+ "template.shift_type_home_to_work": "Home → Work",
950
+ "template.shift_type_work_to_home": "Work → Home",
951
+ "template.shift_type_h2w_short": "H→W",
952
+ "template.shift_type_w2h_short": "W→H",
953
+ "template.shift_label": "Shift",
954
+ "template.departure_time_label": "Departure",
955
+ "template.departure_short": "Dep",
956
+ "template.arrival_time_label": "Arrival",
957
+ "template.arrival_short": "Arr",
958
+ "template.batch_time_label": "Batch Time",
959
+ "template.batch_short": "Batch",
960
+ "template.vehicle_count_label": "Number of Vehicles",
961
+ "template.vehicles_unit": "vehicles",
962
+ "template.copy_button": "Copy",
963
+ "template.minutes_unit": "min",
964
+ "template.no_shifts": "No shifts added yet. Click 'Add Shift' to create one.",
965
+ "template.no_shifts_title": "No Shifts",
966
+ "template.no_shifts_description": "Add a shift to get started",
967
+ "template.vehicles_title": "Vehicles",
968
+ "template.no_vehicles": "No vehicles. Add shifts to generate vehicles.",
969
+ "template.vehicle_driving_side_label": "Vehicle Driving Side",
970
+ "template.driving_side_left": "Left",
971
+ "template.driving_side_right": "Right",
972
+ "template.vehicle_shift_distance_label": "Vehicle Shift Distance",
973
+ "template.shrink_time_delta_label": "Shrink Time Delta",
974
+ "template.reverse_shrink_time_delta_label": "Reverse Shrink Time Delta",
975
+ "template.offer_auto_cancellation_timeout_label": "Offer Auto Cancellation Timeout",
976
+ "template.boarding_pass_label": "Boarding Pass Type",
977
+ "template.boarding_pass_service_number": "Service Number",
978
+ "template.boarding_pass_qr_code": "QR Code",
979
+ "template.vehicle_selection_rules_title": "Vehicle Selection Rules",
980
+ "template.vehicle_filter_zero_coordinates": "Filter vehicles with zero coordinates",
981
+ "template.vehicle_filter_zero_coordinates_only_after_booking_start_time": "Filter zero coordinates only after booking start time",
982
+ "template.vehicle_filter_zero_coordinates_only_after_start_time": "Filter zero coordinates only after start time",
983
+ "template.vehicle_selection_by_emptiness": "Select by vehicle emptiness",
984
+ "template.vehicle_selection_by_remoteness": "Select by vehicle remoteness",
985
+ "template.vehicle_selection_in_service": "Only select vehicles in service",
986
+ "template.vehicle_selection_in_use": "Only select vehicles in use",
987
+ "template.start_time_end_time_limitations": "Apply start/end time limitations",
988
+ "template.vehicle_selection_arrive_earlier_seconds": "Arrive Earlier (seconds)",
989
+ "template.vehicle_selection_by_distance_fallback_radius_m": "Distance Fallback Radius",
990
+ "template.vehicle_capacity_label": "Vehicle Capacity",
991
+ "template.capacity_label_short": "Capacity",
992
+ "template.on_demand_label": "On-Demand",
993
+ "template.no_capacity": "No capacity constraints. Click 'Add' to create one.",
994
+ "template.capacity_description": "Capacity constraints (e.g., passenger: 4, wheelchair: 2)",
995
+ "template.capacity_key_passenger": "passenger",
996
+ "template.capacity_key_wheelchair": "wheelchair",
997
+ "template.capacity_key_cbcm": "cbcm",
998
+ "template.capacity_key_g": "g",
999
+ "template.capacity_key_kg": "kg",
1000
+ "template.capacity_key_units": "units",
1001
+ "template.jit_calculation_parameters_label": "JIT Calculation Parameters",
1002
+ "template.jit_pickup_first_stage_label": "Pickup - Max Walking Distance (First Stage)",
1003
+ "template.jit_pickup_waypoint_first_stage_label": "Pickup - Max Walking Distance for Waypoint Nodes (First Stage)",
1004
+ "template.jit_pickup_second_stage_label": "Pickup - Max Walking Distance (Second Stage)",
1005
+ "template.jit_dropoff_first_stage_label": "Dropoff - Max Walking Distance (First Stage)",
1006
+ "template.jit_dropoff_waypoint_first_stage_label": "Dropoff - Max Walking Distance for Waypoint Nodes (First Stage)",
1007
+ "template.jit_dropoff_second_stage_label": "Dropoff - Max Walking Distance (Second Stage)",
1008
+ "template.stop_type_bus_stop": "Bus Stop",
1009
+ "template.stop_type_lamp_post": "Lamp Post",
1010
+ "template.stop_type_petrol_station": "Petrol Station",
1011
+ "template.stop_type_taxi_stand": "Taxi Stand",
1012
+ "template.stop_type_lobby": "Lobby",
1013
+ "template.stop_type_mrt_station": "MRT Station",
1014
+ "template.stop_type_lrt_station": "LRT Station",
1015
+ "template.stop_type_building": "Building",
1016
+ "template.stop_type_virtual_stop": "Virtual Stop",
1017
+ "template.stop_type_other": "Other",
1018
+ "template.jit_pickup_artificial_nodes_label": "Pickup - Max Walking Distance for Artificial Nodes",
1019
+ "template.jit_general_settings_label": "General Settings",
1020
+ "template.jit_commute_offer_prefix_label": "Commute Offer Name Prefix",
1021
+ "template.jit_dropoff_artificial_stops_label": "Dropoff Number of Artificial Stops",
1022
+ "template.jit_dropoff_service_time_label": "Dropoff Service Time (seconds)",
1023
+ "template.jit_waypoints_chunk_size_label": "Waypoints Calculation Chunk Size",
1024
+ "template.jit_engine_settings_label": "Engine Settings",
1025
+ "template.jit_vehicle_costs_label": "Vehicle Costs",
1026
+ "template.jit_guided_local_search_label": "Guided Local Search Lambda Coefficient",
1027
+ "template.jit_solver_settings_label": "Solver Settings",
1028
+ "template.jit_first_solution_strategies_label": "First Solution Strategies",
1029
+ "template.jit_max_pool_size_label": "Max Pool Size",
1030
+ "template.jit_node_weight_coeff_label": "Node Weight Coefficient",
1031
+ "template.jit_shifts_solver_retries_label": "Shifts Solver Max Retries",
1032
+ "template.jit_time_limit_1st_phase_label": "Time Limit 1st Phase (ms)",
1033
+ "template.jit_time_limit_2nd_phase_label": "Time Limit 2nd Phase (ms)",
1034
+ "template.jit_trip_cost_label": "Trip Cost",
1035
+ "template.jit_geofence_vehicles_priority_label": "Geofence Vehicles Priority",
1036
+ "template.jit_log_search_label": "Log Search",
1037
+ "template.strategy_automatic": "Automatic",
1038
+ "template.strategy_global_cheapest_arc": "Global Cheapest Arc",
1039
+ "template.strategy_local_cheapest_arc": "Local Cheapest Arc",
1040
+ "template.strategy_path_cheapest_arc": "Path Cheapest Arc",
1041
+ "template.strategy_path_most_constrained_arc": "Path Most Constrained Arc",
1042
+ "template.strategy_evaluator_strategy": "Evaluator Strategy",
1043
+ "template.strategy_all_unperformed": "All Unperformed",
1044
+ "template.strategy_best_insertion": "Best Insertion",
1045
+ "template.strategy_parallel_cheapest_insertion": "Parallel Cheapest Insertion",
1046
+ "template.strategy_local_cheapest_insertion": "Local Cheapest Insertion",
1047
+ "template.strategy_savings": "Savings",
1048
+ "template.strategy_sweep": "Sweep",
1049
+ "template.strategy_first_unbound_min_value": "First Unbound Min Value",
1050
+ "template.strategy_christofides": "Christofides",
1051
+ "template.strategy_sequential_cheapest_insertion": "Sequential Cheapest Insertion",
1052
+ "template.strategy_adjustable_parallel_cheapest_insertion": "Adjustable Parallel Cheapest Insertion",
1053
+ "template.strategy_logistics_parallel_cheapest_insertion": "Logistics Parallel Cheapest Insertion",
1054
+ "template.commute_offer": "Commute Offer",
1055
+ "template.creation_success_title": "Template Created Successfully",
1056
+ "template.creation_success_description": "Your template has been created with the following results:",
1057
+ "template.vehicles_created": "vehicle(s) created",
1058
+ "template.invalid_vehicles": "invalid vehicle(s)",
1059
+ "template.overlaps_detected": "overlap(s) detected",
1060
+ "template.drivers_title": "Drivers",
1061
+ "template.drivers_description": "Drag & drop to assign",
1062
+ "template.driver_assignment_error": "Driver Assignment Error: Each driver can only be assigned to one vehicle",
1063
+ "template.driver_assignment_error_jit": "Driver Assignment Error: Each driver can only be assigned to one vehicle per shift",
1064
+ "template.auto_assign_all": "Auto-assign All",
1065
+ "template.unassign_all": "Unassign All",
1066
+ "template.vehicles_will_be_created": "vehicles will be created",
1067
+ "template.excluded": "excluded",
1068
+ "template.of": "of",
1069
+ "template.vehicles_shown": "vehicles shown",
1070
+ "template.restore_all": "Restore All",
1071
+ "template.vehicles_removed": "vehicle(s) removed",
1072
+ "template.no_drivers": "No drivers available for this project",
1073
+ "template.geofences_title": "Geofences",
1074
+ "template.no_geofences": "No additional geofences selected",
1075
+ "template.view_template": "View Template",
1076
+ // Pricing
1077
+ "pricing.drawer_description": "Configure pricing policy details",
1078
+ "pricing.create_title": "Create Pricing Policy",
1079
+ "pricing.edit_title": "Edit Pricing Policy",
1080
+ "pricing.view_title": "Pricing Policy",
1081
+ "pricing.save": "Save Pricing",
1082
+ "pricing.saving": "Saving...",
1083
+ "pricing.cancel": "Cancel",
1084
+ "pricing.edit": "Edit",
1085
+ // Basic Info
1086
+ "pricing.basic_info": "Basic Information",
1087
+ "pricing.name_label": "Name",
1088
+ "pricing.name_placeholder": "Enter pricing policy name",
1089
+ "pricing.currency_label": "Currency",
1090
+ "pricing.currency_placeholder": "Select currency",
1091
+ "pricing.currency_sgd": "SGD - Singapore Dollar",
1092
+ "pricing.currency_usd": "USD - US Dollar",
1093
+ "pricing.currency_jpy": "JPY - Japanese Yen",
1094
+ "pricing.variability_label": "Variability",
1095
+ "pricing.variability_placeholder": "Select variability",
1096
+ "pricing.variability_exact": "Exact",
1097
+ "pricing.variability_approximate": "Approximate",
1098
+ "pricing.variability_range": "Range",
1099
+ "pricing.strategy_help": "Only linear strategy is currently supported",
1100
+ // Payment Methods
1101
+ "pricing.payment_methods": "Payment Methods",
1102
+ "pricing.payment_methods_customer": "Customer Payment Methods",
1103
+ "pricing.payment_methods_operator": "Operator Payment Methods",
1104
+ "pricing.payment_method_type": "Method Type",
1105
+ "pricing.payment_provider": "Provider",
1106
+ "pricing.add_payment_method": "Add Payment Method",
1107
+ "pricing.payment_type_cash": "Cash",
1108
+ "pricing.payment_type_card": "Card",
1109
+ "pricing.payment_type_wallet": "Wallet",
1110
+ "pricing.provider_internal": "Internal",
1111
+ "pricing.provider_stripe": "Stripe",
1112
+ "pricing.provider_opal": "Opal",
1113
+ // Tickets Configuration
1114
+ "pricing.tickets_configuration": "Tickets Configuration",
1115
+ "pricing.add_section": "Add Section",
1116
+ "pricing.section_items": "Section Items",
1117
+ "pricing.add_item": "Add Item",
1118
+ "pricing.section_constraints_min_demand": "Minimum Total Demand",
1119
+ "pricing.section_constraints_help": "Minimum total demand required for this section",
1120
+ "pricing.section_title": "Section Title",
1121
+ "pricing.section_constraints": "Section Constraints",
1122
+ "pricing.total_minimum_demand": "Total Minimum Demand",
1123
+ "pricing.add_ticket_item": "Add Ticket Item",
1124
+ "pricing.item_ticket_type": "Ticket Type",
1125
+ "pricing.item_name_en": "Item Name (English)",
1126
+ "pricing.item_name_ja": "Item Name (Japanese)",
1127
+ "pricing.ticket_type": "Ticket Type",
1128
+ "pricing.ticket_passenger": "Passenger",
1129
+ "pricing.ticket_passenger_child": "Child Passenger",
1130
+ "pricing.ticket_passenger_baby": "Baby Passenger",
1131
+ "pricing.ticket_wheelchair": "Wheelchair",
1132
+ "pricing.ticket_wheelchair_child": "Child Wheelchair",
1133
+ "pricing.ticket_wheelchair_baby": "Baby Wheelchair",
1134
+ "pricing.ticket_bicycle": "Bicycle",
1135
+ "pricing.ticket_stroller": "Stroller",
1136
+ "pricing.ticket_luggage": "Luggage",
1137
+ "pricing.max": "Max",
1138
+ "pricing.require_driver_verification": "Require Driver Verification",
1139
+ "pricing.title_en": "Title (English)",
1140
+ "pricing.title_ja": "Title (Japanese)",
1141
+ "pricing.subtitle_en": "Subtitle (English)",
1142
+ "pricing.subtitle_ja": "Subtitle (Japanese)",
1143
+ "pricing.description_en": "Description (English)",
1144
+ "pricing.description_ja": "Description (Japanese)",
1145
+ // Format & Rounding
1146
+ "pricing.format_rounding": "Format & Rounding",
1147
+ "pricing.format": "Price Format",
1148
+ "pricing.format_help": "Use {value} as placeholder. Example: ฿{value} or {value} THB",
1149
+ "pricing.format_localized": "Localized Format",
1150
+ "pricing.format_localized_help": "Optional: Override format for specific languages",
1151
+ "pricing.format_localized_en": "English (en)",
1152
+ "pricing.format_localized_ja": "Japanese (ja)",
1153
+ "pricing.rounding_strategy": "Rounding Strategy",
1154
+ "pricing.minimal_unit": "Minimal Unit",
1155
+ "pricing.minimal_unit_label": "Minimal Unit",
1156
+ "pricing.minimal_unit_placeholder": "Select minimal unit",
1157
+ "pricing.minimal_unit_cent": "Cent",
1158
+ "pricing.minimal_unit_integer": "Integer",
1159
+ "pricing.round_to": "Round To",
1160
+ "pricing.round_to_placeholder": "Select round to",
1161
+ "pricing.round_to_ten": "Ten",
1162
+ "pricing.round_to_one": "One",
1163
+ "pricing.round_to_tencent": "Ten Cent",
1164
+ "pricing.round_to_cent": "Cent",
1165
+ "pricing.round_function": "Round Function",
1166
+ "pricing.round_function_placeholder": "Select round function",
1167
+ "pricing.round_function_round": "Round",
1168
+ "pricing.round_function_floor": "Floor",
1169
+ "pricing.round_function_ceil": "Ceil",
1170
+ "pricing.round_floor": "Floor",
1171
+ "pricing.round_round": "Round",
1172
+ "pricing.round_ceil": "Ceil",
1173
+ // Discounts
1174
+ "pricing.discounts": "Discounts",
1175
+ "pricing.payment_method_discounts": "Payment Method Discounts",
1176
+ "pricing.organization_discounts": "Organization Discounts",
1177
+ "pricing.add_discount": "Add Discount",
1178
+ "pricing.discount_kind": "Discount Formula",
1179
+ "pricing.discount_kind_percent_lower": "Percent Lower",
1180
+ "pricing.discount_kind_percent_upper": "Percent Upper",
1181
+ "pricing.discount_kind_linear": "Linear",
1182
+ "pricing.discount_percent_lower": "Percent Lower",
1183
+ "pricing.discount_percent_higher": "Percent Higher",
1184
+ "pricing.discount_constant_lower": "Constant Lower",
1185
+ "pricing.discount_constant_higher": "Constant Higher",
1186
+ "pricing.discount_constant": "Constant",
1187
+ "pricing.discount_percentage": "Percentage",
1188
+ "pricing.discount_description": "Description",
1189
+ "pricing.discount_description_en": "Description (English)",
1190
+ "pricing.discount_description_ja": "Description (Japanese)",
1191
+ "pricing.payment_method_key": "Payment Method",
1192
+ "pricing.add_organization_discount": "Add Organization Discount",
1193
+ "pricing.organization_code": "Organization Code",
1194
+ // Pricing Rules
1195
+ "pricing.rules": "Pricing Rules",
1196
+ "pricing.rules_per_ticket_type": "Pricing Rules per Ticket Type",
1197
+ "pricing.add_rule": "Add Rule",
1198
+ "pricing.distance_coefficient": "Distance Coefficient",
1199
+ "pricing.distance_coefficient_help": "Price per kilometer in minimal currency units",
1200
+ "pricing.initial_price": "Initial Price",
1201
+ "pricing.initial_price_help": "Base price in minimal currency units",
1202
+ "pricing.demand_limit": "Demand Limit",
1203
+ "pricing.demand_limit_help": "Exceeding this limit causes additional charges",
1204
+ "pricing.demand_additional_price": "Additional Demand Price",
1205
+ "pricing.demand_coefficient": "Coefficient",
1206
+ "pricing.demand_price_coefficient": "Demand Price Coefficient",
1207
+ "pricing.demand_fixed_amount": "Fixed Amount",
1208
+ "pricing.demand_fixed_amount_label": "Demand Fixed Amount",
1209
+ "pricing.extensions": "Price Extensions",
1210
+ "pricing.add_extension": "Add Extension",
1211
+ "pricing.extension_type": "Extension Type",
1212
+ "pricing.extension_label": "Extension",
1213
+ "pricing.extension_name": "Extension Name",
1214
+ "pricing.extension_stop_id": "Stop ID",
1215
+ "pricing.surcharge": "Surcharge",
1216
+ "pricing.exact_price": "Exact Price",
1217
+ "pricing.discount_percent": "Discount %",
1218
+ "pricing.pickup_stop_ids": "Pickup Stop IDs (comma-separated)",
1219
+ "pricing.dropoff_stop_ids": "Dropoff Stop IDs (comma-separated)",
1220
+ // Terms
1221
+ "pricing.terms": "Terms & Conditions",
1222
+ "pricing.cancellation_terms": "Cancellation Terms",
1223
+ "pricing.fail_to_board_terms": "Fail to Board Terms",
1224
+ "pricing.penalty": "Penalty",
1225
+ "pricing.grace_period": "Grace Period (seconds)",
1226
+ "pricing.terms_window_minutes": "Time Window (minutes)",
1227
+ "pricing.terms_window_minutes_placeholder": "Enter minutes",
1228
+ "pricing.terms_penalty_percentage": "Penalty Percentage",
1229
+ "pricing.terms_penalty_percentage_placeholder": "Enter percentage",
1230
+ // Common
1231
+ "pricing.timestamps": "Timestamps",
1232
+ "pricing.view_raw_json": "View Raw JSON",
1233
+ // TrackPlayer
1234
+ "trackplayer.vehicle": "Vehicle",
1235
+ "trackplayer.simulation": "Simulation",
1236
+ "trackplayer.latest_state": "Latest State",
1237
+ "trackplayer.agent_id": "Agent ID",
1238
+ "trackplayer.gps_not_updated": "GPS not updated yet",
1239
+ "trackplayer.activity": "Activity",
1240
+ "trackplayer.node_completions": "Node Completions",
1241
+ "trackplayer.route_segments": "Route Segments",
1242
+ "trackplayer.segment_started": "Segment Started",
1243
+ "trackplayer.assigned_nodes_count": "Assigned Nodes Count",
1244
+ "trackplayer.vehicle_states": "Vehicle States",
1245
+ "trackplayer.timestamp": "Timestamp",
1246
+ "trackplayer.in_use": "In Use",
1247
+ "trackplayer.nodes": "Nodes",
1248
+ "trackplayer.in_use_status_changes": "In-Use Status Changes",
1249
+ "trackplayer.total_status_changes": "Total Status Changes",
1250
+ "trackplayer.total_time_enabled": "Total Time Enabled",
1251
+ "trackplayer.total_time_disabled": "Total Time Disabled",
1252
+ "trackplayer.start_time": "Start Time",
1253
+ "trackplayer.end_time": "End Time",
1254
+ "trackplayer.duration": "Duration",
1255
+ "trackplayer.status": "Status",
1256
+ "trackplayer.enabled": "Enabled",
1257
+ "trackplayer.disabled": "Disabled",
1258
+ "trackplayer.min": "min",
1259
+ "trackplayer.minutes": "minutes",
1260
+ "trackplayer.search": "Search",
1261
+ "trackplayer.search_placeholder": "Search...",
1262
+ "trackplayer.time_range_filter": "Time Range Filter",
1263
+ "trackplayer.current_position": "Current Position",
1264
+ "trackplayer.match": "Match",
1265
+ "trackplayer.value": "Value",
1266
+ "trackplayer.no_results": "No results found",
1267
+ "trackplayer.settings": "Settings",
1268
+ "trackplayer.show_gps_track": "Show GPS track",
1269
+ "trackplayer.show_vehicle_route": "Show vehicle position and assigned route",
1270
+ "trackplayer.gps_track_follow": "GPS track follow position",
1271
+ "trackplayer.use_vehicle_time_range": "Show data only within vehicle start-end time",
1272
+ "trackplayer.vehicle_times_not_set": "Vehicle start and end times are not set",
1273
+ "trackplayer.index": "Index",
1274
+ "trackplayer.node_id": "Node ID",
1275
+ "trackplayer.booking_id": "Booking ID",
1276
+ "trackplayer.offer": "Offer",
1277
+ "trackplayer.eta": "ETA",
1278
+ "trackplayer.latest": "Latest",
1279
+ "trackplayer.stop_name": "Stop Name",
1280
+ "trackplayer.action": "Action",
1281
+ "trackplayer.details": "Details",
1282
+ "trackplayer.loading_vehicle": "Loading vehicle data...",
1283
+ "trackplayer.loading_vehicle_states": "Loading vehicle states...",
1284
+ "trackplayer.loading_nodes": "Loading nodes...",
1285
+ "trackplayer.loading_offers": "Loading offers...",
1286
+ "trackplayer.loading_events": "Loading events...",
1287
+ // Transit Stop Set Drawer
1288
+ "transitstopset.create_title": "Create Transit Stop Set",
1289
+ "transitstopset.create_description": "Create a new transit stop set with filter expressions",
1290
+ "transitstopset.create_button": "Create Transit Stop Set",
1291
+ "transitstopset.edit_title": "Edit Transit Stop Set",
1292
+ "transitstopset.edit_description": "Modify transit stop set properties and filters",
1293
+ "transitstopset.project_label": "Project",
1294
+ "transitstopset.project_placeholder": "Search projects...",
1295
+ "transitstopset.name_label": "Name",
1296
+ "transitstopset.name_placeholder": "Enter transit stop set name",
1297
+ "transitstopset.filter_expression_label": "Filter Expression",
1298
+ "transitstopset.filter_expression_hint": "JSON object for filtering transit stops (e.g., {\"id__lt\": 100})",
1299
+ "transitstopset.exclude_expression_label": "Exclude Expression",
1300
+ "transitstopset.exclude_expression_hint": "JSON object for excluding transit stops (e.g., {\"id\": 50})",
1301
+ // Service Drawer
1302
+ "service.create_title": "Create Service",
1303
+ "service.create_description": "Create a new service from a template",
1304
+ "service.create_button": "Create Service",
1305
+ "service.project_label": "Project",
1306
+ "service.project_placeholder": "Search projects...",
1307
+ "service.template_label": "Template",
1308
+ "service.template_placeholder": "Search templates...",
1309
+ "service.name_label": "Service Name",
1310
+ "service.name_placeholder": "Enter service name",
1311
+ "service.date_range_label": "Service Period",
1312
+ "service.active_weekdays_label": "Active Days of Week",
1313
+ "service.copy_vehicles_label": "Copy Vehicles from Template",
1314
+ // Date Range Picker
1315
+ "date_range.select_dates": "Select date range",
1316
+ // Weekdays
1317
+ "weekday.sun_short": "S",
1318
+ "weekday.mon_short": "M",
1319
+ "weekday.tue_short": "T",
1320
+ "weekday.wed_short": "W",
1321
+ "weekday.thu_short": "T",
1322
+ "weekday.fri_short": "F",
1323
+ "weekday.sat_short": "S",
1324
+ "weekday.week_starts_on": "0", // 0 = Sunday, 1 = Monday
1325
+ // Geofences
1326
+ "geofences.title": "Geofences",
1327
+ "geofences.description": "Manage geographic boundaries and areas",
1328
+ "geofences.show_map": "Show Map",
1329
+ "geofences.hide_map": "Hide Map",
1330
+ "geofences.selected_count": "{{count}} geofence(s) selected",
1331
+ "geofences.toggle_hint": "Click rows to toggle geofences on map",
1332
+ "geofence.status_active": "Active",
1333
+ "geofence.status_inactive": "Inactive",
1334
+ "geofence.create_title": "Create Geofence",
1335
+ "geofence.create_description": "Draw a polygon on the map, upload a file, or paste GeoJSON",
1336
+ "geofence.edit_title": "Edit Geofence",
1337
+ "geofence.edit_description": "Modify the geofence geometry, name, or other properties",
1338
+ "geofence.upload_label": "Upload GeoJSON File",
1339
+ "geofence.upload_button": "Upload File",
1340
+ "geofence.upload_hint": "Upload a GeoJSON file or draw a polygon on the map",
1341
+ "geofence.paste_label": "Or Paste GeoJSON",
1342
+ "geofence.paste_placeholder": "Paste GeoJSON here...",
1343
+ "geofence.paste_button": "Load GeoJSON",
1344
+ "geofence.project_label": "Project",
1345
+ "geofence.project_placeholder": "Search projects...",
1346
+ "geofence.name_label": "Name",
1347
+ "geofence.name_placeholder": "Enter geofence name",
1348
+ "geofence.description_label": "Description",
1349
+ "geofence.description_placeholder": "Enter description (optional)",
1350
+ "geofence.create_button": "Create Geofence",
1351
+ // Map Geofence Selector
1352
+ "map.geofences.button": "Geofences",
1353
+ "map.geofences.select_all": "Select All",
1354
+ "map.geofences.clear_all": "Clear All",
1355
+ "map.geofences.main_section": "Main Geofence",
1356
+ "map.geofences.vehicle_section": "Vehicle Geofences",
1357
+ "map.geofences.tooltip_name": "Name",
1358
+ "map.geofences.tooltip_key": "Key",
1359
+ // Import Passengers
1360
+ "import.passengers.button": "Import Passengers",
1361
+ "import.passengers.title": "Import Passengers",
1362
+ "import.passengers.description": "Import passengers from a CSV file",
1363
+ "import.passengers.template_hint": "Not sure about the format? Download a template to get started.",
1364
+ "import.passengers.download_template": "Download CSV Template",
1365
+ "import.passengers.select_file": "Select File",
1366
+ "import.passengers.preview_hint": "Review and edit your data before uploading",
1367
+ "import.passengers.rows": "rows",
1368
+ "import.passengers.add_row": "Add Row",
1369
+ "import.passengers.upload": "Upload",
1370
+ "import.passengers.uploading": "Uploading passengers...",
1371
+ "import.passengers.error.empty_file": "File is empty or has no data rows.",
1372
+ "import.passengers.error.parse_failed": "Failed to parse CSV file.",
1373
+ "import.passengers.result.success_message": "Successfully imported!",
1374
+ "import.passengers.result.passengers_created": "passengers created",
1375
+ "import.passengers.result.breakdown": "Import Breakdown",
1376
+ "import.passengers.result.loaded": "Loaded",
1377
+ "import.passengers.result.created": "Successfully Created",
1378
+ "import.passengers.result.errors": "Errors",
1379
+ "import.passengers.result.duplicates": "Duplicates",
1380
+ "import.passengers.result.total_rows": "Total Rows",
1381
+ "import.passengers.result.error_details_title": "Error Details",
1382
+ "import.passengers.result.row": "Row",
1383
+ "import.passengers.result.more_errors": "...and {count} more errors",
1384
+ "import.passengers.download_error_report": "Download Error Report",
1385
+ "import.passengers.show_uploaded": "Show Uploaded Passengers",
1386
+ "import.passengers.error.invalid_file_type": "Invalid file type. Please upload a CSV file.",
1387
+ "import.passengers.error.file_too_large": "File is too large. Maximum size is 30MB.",
1388
+ "import.passengers.error.upload_failed": "Upload failed. Please try again.",
1389
+ // Import Bookings
1390
+ "import.bookings.button": "Import Bookings",
1391
+ "import.bookings.title": "Import Bookings",
1392
+ "import.bookings.description": "Import bookings from a CSV file",
1393
+ "import.bookings.template_hint": "Not sure about the format? Download a template to get started.",
1394
+ "import.bookings.download_template": "Download CSV Template",
1395
+ "import.bookings.use_example": "Use Example",
1396
+ "import.bookings.select_file": "Select File",
1397
+ "import.bookings.preview_hint": "Review and edit your data before uploading",
1398
+ "import.bookings.scroll_hint": "Scroll horizontally and vertically to view all fields",
1399
+ "import.bookings.rows": "rows",
1400
+ "import.bookings.add_row": "Add Row",
1401
+ "import.bookings.upload": "Upload",
1402
+ "import.bookings.uploading": "Uploading bookings...",
1403
+ "import.bookings.progress_detail": "Creating bookings",
1404
+ "import.bookings.processing_row": "Processing row",
1405
+ "import.bookings.error.empty_file": "File is empty or has no data rows.",
1406
+ "import.bookings.error.parse_failed": "Failed to parse CSV file.",
1407
+ "import.bookings.result.success_message": "Successfully imported!",
1408
+ "import.bookings.result.bookings_created": "bookings created",
1409
+ "import.bookings.result.breakdown": "Import Breakdown",
1410
+ "import.bookings.result.loaded": "Loaded",
1411
+ "import.bookings.result.created": "Successfully Created",
1412
+ "import.bookings.result.errors": "Errors",
1413
+ "import.bookings.result.total_rows": "Total Rows",
1414
+ "import.bookings.result.error_details_title": "Error Details",
1415
+ "import.bookings.result.row": "Row",
1416
+ "import.bookings.result.more_errors": "...and {count} more errors",
1417
+ "import.bookings.download_error_report": "Download Error Report",
1418
+ "import.bookings.error.invalid_file_type": "Invalid file type. Please upload a CSV file.",
1419
+ "import.bookings.error.file_too_large": "File is too large. Maximum size is 30MB.",
1420
+ "import.bookings.error.upload_failed": "Upload failed. Please try again.",
1421
+ "booking.import_bookings": "Import",
1422
+ // General Import
1423
+ "import.choose_file": "Choose File",
1424
+ "import.download_example": "Download Example CSV",
1425
+ "import.import": "Import",
1426
+ "import.no_data": "File is empty or has no data rows",
1427
+ "import.parse_error": "Failed to parse CSV file",
1428
+ "import.select_file": "Select CSV File",
1429
+ "import.errors": "errors",
1430
+ "import.validation_errors": "Validation Errors",
1431
+ "import.uploading": "Creating...",
1432
+ "import.success": "Import Successful",
1433
+ "import.partial_success": "Partial Success",
1434
+ "import.created": "created",
1435
+ "import.failed": "failed",
1436
+ // Example Tabs
1437
+ "example.preview": "Preview",
1438
+ "example.code": "Code",
1439
+ "example.fullscreen": "Fullscreen",
1440
+ "example.exit_fullscreen": "Exit Fullscreen",
1441
+ "example.copy_code": "Copy code",
1442
+ "example.language": "Language",
1443
+ "example.selected_count": "Selected {count} {item}(s):",
1444
+ "example.project_label": "Project",
1445
+ "example.templates_label": "Templates",
1446
+ // Language Selector
1447
+ "language.english": "English",
1448
+ "language.japanese": "Japanese",
1449
+ "language.select": "Select language",
1450
+ // Timezone Selector
1451
+ "timezone.search_placeholder": "Search timezone...",
1452
+ "timezone.no_results": "No timezone found.",
1453
+ // Simulation Calendar
1454
+ "calendar.no_connection": "No active connection. Please configure a connection first.",
1455
+ "calendar.live_example": "Live Example",
1456
+ "calendar.simulation_calendar": "Simulation Calendar",
1457
+ "calendar.click_dates": "Click on dates with blue dots to see simulations for that day.",
1458
+ "calendar.showing_simulations": "Showing {count} simulation{plural}",
1459
+ "calendar.selected_date_info": "Selected Date Info",
1460
+ "calendar.simulations_on": "Simulations on {date}",
1461
+ "calendar.select_date": "Select a date to view simulations",
1462
+ "calendar.no_simulations": "No simulations found for this date.",
1463
+ "calendar.filtered_example": "Filtered Calendar Example",
1464
+ "calendar.basic_filters": "Basic Filters",
1465
+ "calendar.basic_filters_desc": "Select project, template, and date to filter simulations",
1466
+ "calendar.with_simulation_selector": "With Simulation Selector",
1467
+ "calendar.simulation_selector_desc": "All four filters including individual simulation selection",
1468
+ "calendar.selected_simulation": "Selected Simulation",
1469
+ "calendar.select_date_button": "Select date...",
1470
+ "calendar.select_project_first": "Select project first",
1471
+ "calendar.select_date_first": "Select date first",
1472
+ "calendar.found": "found",
1473
+ "calendar.project_label": "Project",
1474
+ // Booking
1475
+ "booking.create_booking": "Create Booking",
1476
+ "booking.new_booking": "New Booking",
1477
+ "booking.passenger": "Passenger",
1478
+ "booking.template": "Template",
1479
+ "booking.date": "Date",
1480
+ "booking.time": "Time",
1481
+ "booking.departure_time": "Departure Time",
1482
+ "booking.now": "Now",
1483
+ "booking.specific_time": "Specific Time",
1484
+ "booking.pickup": "Pickup",
1485
+ "booking.dropoff": "Dropoff",
1486
+ "booking.pickup_location": "Pickup Location",
1487
+ "booking.dropoff_location": "Dropoff Location",
1488
+ "booking.search_pickup": "Search pickup locations...",
1489
+ "booking.search_dropoff": "Search dropoff locations...",
1490
+ "booking.tickets": "Tickets",
1491
+ "booking.payment_summary": "Payment Summary",
1492
+ "booking.show_details": "Show Details",
1493
+ "booking.hide_details": "Hide Details",
1494
+ "booking.calculating_price": "Calculating price...",
1495
+ "booking.select_stops_and_tickets": "Select pickup, dropoff, and at least one ticket to see price",
1496
+ "booking.subtotal": "Subtotal",
1497
+ "booking.discount": "Discount",
1498
+ "booking.organization_discount": "Organization discount",
1499
+ "booking.total": "Total",
1500
+ "booking.total_fare": "Total Fare",
1501
+ "booking.cancellation_fee": "Cancellation fee",
1502
+ "booking.fail_to_board_fee": "Fail to board fee",
1503
+ "booking.after_seconds": "after {seconds}s",
1504
+ "booking.remarks_to_driver": "Remarks to Driver",
1505
+ "booking.remarks_placeholder": "Add any special instructions for the driver...",
1506
+ "booking.cancel": "Cancel",
1507
+ "booking.create": "Create Booking",
1508
+ "booking.creating": "Creating...",
1509
+ "booking.success_title": "Booking Created Successfully",
1510
+ "booking.success_message": "Your booking has been created and confirmed",
1511
+ "booking.booking_id": "Booking ID",
1512
+ "booking.status": "Status",
1513
+ "booking.create_another": "Create Another Booking",
1514
+ "booking.back_to_trips": "Back to Trips",
1515
+ "booking.requested": "Requested",
1516
+ "booking.assigned": "Assigned",
1517
+ "booking.assigned_stops": "Assigned Stops",
1518
+ "booking.assigned_vehicle": "Assigned Vehicle",
1519
+ "booking.payment_method.cash": "Cash",
1520
+ "booking.payment_method.card": "Card",
1521
+ "booking.payment_method.digital_wallet": "Digital Wallet",
1522
+ "booking.payment_method.bank_transfer": "Bank Transfer",
1523
+ "booking.state.prepared": "Prepared",
1524
+ "booking.state.assigned": "Assigned",
1525
+ "booking.state.rejected_by_system": "Rejected",
1526
+ "booking.state.cancelled": "Cancelled",
1527
+ "booking.state.picked_up": "Picked Up",
1528
+ "booking.state.completed": "Completed",
1529
+ "booking.state.no_show": "No Show",
1530
+ "booking.travel_time": "{minutes} min",
1531
+ "booking.window_closed_title": "Booking Window Closed",
1532
+ "booking.window_not_started": "Booking window opens at {time}",
1533
+ "booking.window_ended": "Booking window closed at {time}",
1534
+ // SGERP Map
1535
+ "sgerp_map.map_style": "Map Style",
1536
+ "sgerp_map.style_light": "Light",
1537
+ "sgerp_map.style_dark": "Dark",
1538
+ "sgerp_map.style_satellite": "Satellite",
1539
+ "sgerp_map.style_street": "Street",
1540
+ "sgerp_map.style_outdoors": "Outdoors",
1541
+ // Table Map Controls
1542
+ "table.map_hide": "Hide map",
1543
+ "table.map_split": "Split view (50/50)",
1544
+ "table.map_full": "Full map",
1545
+ // Country Names
1546
+ "country.us": "United States",
1547
+ "country.ca": "Canada",
1548
+ "country.gb": "United Kingdom",
1549
+ "country.au": "Australia",
1550
+ "country.nz": "New Zealand",
1551
+ "country.sg": "Singapore",
1552
+ "country.my": "Malaysia",
1553
+ "country.th": "Thailand",
1554
+ "country.id": "Indonesia",
1555
+ "country.ph": "Philippines",
1556
+ "country.vn": "Vietnam",
1557
+ "country.jp": "Japan",
1558
+ "country.kr": "South Korea",
1559
+ "country.cn": "China",
1560
+ "country.hk": "Hong Kong",
1561
+ "country.tw": "Taiwan",
1562
+ "country.in": "India",
1563
+ "country.pk": "Pakistan",
1564
+ "country.bd": "Bangladesh",
1565
+ "country.lk": "Sri Lanka",
1566
+ "country.ae": "United Arab Emirates",
1567
+ "country.sa": "Saudi Arabia",
1568
+ "country.il": "Israel",
1569
+ "country.tr": "Turkey",
1570
+ "country.ru": "Russia",
1571
+ "country.de": "Germany",
1572
+ "country.fr": "France",
1573
+ "country.it": "Italy",
1574
+ "country.es": "Spain",
1575
+ "country.pt": "Portugal",
1576
+ "country.nl": "Netherlands",
1577
+ "country.be": "Belgium",
1578
+ "country.ch": "Switzerland",
1579
+ "country.at": "Austria",
1580
+ "country.se": "Sweden",
1581
+ "country.no": "Norway",
1582
+ "country.dk": "Denmark",
1583
+ "country.fi": "Finland",
1584
+ "country.pl": "Poland",
1585
+ "country.cz": "Czech Republic",
1586
+ "country.gr": "Greece",
1587
+ "country.ie": "Ireland",
1588
+ "country.za": "South Africa",
1589
+ "country.eg": "Egypt",
1590
+ "country.ng": "Nigeria",
1591
+ "country.ke": "Kenya",
1592
+ "country.br": "Brazil",
1593
+ "country.mx": "Mexico",
1594
+ "country.ar": "Argentina",
1595
+ "country.cl": "Chile",
1596
+ "country.co": "Colombia",
1597
+ "country.pe": "Peru",
1598
+ "country.ve": "Venezuela",
1599
+ "country.kh": "Cambodia",
1600
+ "country.la": "Laos",
1601
+ "country.mm": "Myanmar",
1602
+ "country.bn": "Brunei",
1603
+ "country.np": "Nepal",
1604
+ "country.mv": "Maldives",
1605
+ "country.af": "Afghanistan",
1606
+ "country.iq": "Iraq",
1607
+ "country.ir": "Iran",
1608
+ "country.jo": "Jordan",
1609
+ "country.kw": "Kuwait",
1610
+ "country.lb": "Lebanon",
1611
+ "country.om": "Oman",
1612
+ "country.qa": "Qatar",
1613
+ "country.bh": "Bahrain",
1614
+ "country.ua": "Ukraine",
1615
+ "country.ro": "Romania",
1616
+ "country.hu": "Hungary",
1617
+ "country.bg": "Bulgaria",
1618
+ "country.hr": "Croatia",
1619
+ "country.rs": "Serbia",
1620
+ "country.si": "Slovenia",
1621
+ "country.sk": "Slovakia",
1622
+ "country.ee": "Estonia",
1623
+ "country.lv": "Latvia",
1624
+ "country.lt": "Lithuania",
1625
+ "country.is": "Iceland",
1626
+ "country.lu": "Luxembourg",
1627
+ "country.mt": "Malta",
1628
+ "country.cy": "Cyprus",
1629
+ // Enum: AlgoType
1630
+ "enum.algo_type.static": "Static",
1631
+ "enum.algo_type.dynamic": "Dynamic",
1632
+ "enum.algo_type.dynamic_2_stages": "Dynamic 2 Stages",
1633
+ "enum.algo_type.timeless": "Timeless",
1634
+ "enum.algo_type.static_or_dynamic": "Static or Dynamic",
1635
+ // Enum: AlgoOptimizeQuantity
1636
+ "enum.algo_optimize_quantity.total_time": "Total Time",
1637
+ "enum.algo_optimize_quantity.total_distance": "Total Distance",
1638
+ "enum.algo_optimize_quantity.passenger_optimization": "Passenger Optimization",
1639
+ // Enum: GenericSchedulerMode
1640
+ "enum.generic_scheduler_mode.prebook": "Prebook",
1641
+ "enum.generic_scheduler_mode.real_time": "Real Time",
1642
+ "enum.generic_scheduler_mode.prebook_cvrptw": "Prebook CVRPTW",
1643
+ "enum.generic_scheduler_mode.logistics_real_time": "Logistics Real Time",
1644
+ // Enum: LocalSearchOperator
1645
+ "enum.local_search_operator.extended_swap_active": "Extended Swap Active",
1646
+ "enum.local_search_operator.logistics_relocate_pair": "Logistics Relocate Pair",
1647
+ "enum.local_search_operator.default_no_operators": "No Operators",
1648
+ // Enum: PathConstraintsMode
1649
+ "enum.path_constraints_mode.legacy": "Legacy",
1650
+ "enum.path_constraints_mode.logistics": "Logistics",
1651
+ // Enum: GeofenceDefinitionStrategy
1652
+ "enum.geofence_definition_strategy.by_dropoff": "By Dropoff",
1653
+ "enum.geofence_definition_strategy.by_pickup": "By Pickup",
1654
+ "enum.geofence_definition_strategy.independent": "Independent",
1655
+ "enum.geofence_definition_strategy.mixed": "Mixed",
1656
+ // Enum: GeofenceVehicleAllocationStrategy
1657
+ "enum.geofence_vehicle_allocation_strategy.strict": "Strict",
1658
+ "enum.geofence_vehicle_allocation_strategy.flexible": "Flexible",
1659
+ // Enum: TruckBanStrategy
1660
+ "enum.truckban_strategy.default": "Default",
1661
+ "enum.truckban_strategy.duplicate_nodes": "Duplicate Nodes",
1662
+ // Enum: BookingOrderPrioritization
1663
+ "enum.booking_order_prioritization.disabled": "Disabled",
1664
+ "enum.booking_order_prioritization.strict": "Strict",
1665
+ "enum.booking_order_prioritization.non_strict": "Non Strict",
1666
+ // Enum: NodeGroupingCapacityStrategy
1667
+ "enum.node_grouping_capacity_strategy.min": "Minimum",
1668
+ "enum.node_grouping_capacity_strategy.max": "Maximum",
1669
+ "enum.node_grouping_capacity_strategy.median": "Median",
1670
+ "enum.node_grouping_capacity_strategy.mean": "Mean",
1671
+ "enum.node_grouping_capacity_strategy.ignore": "Ignore",
1672
+ // Enum: ManualEditApiSolverKind
1673
+ "enum.manual_edit_api_solver_kind.local": "Local",
1674
+ "enum.manual_edit_api_solver_kind.remote": "Remote",
1675
+ // Enum: LogisticsPipelineType
1676
+ "enum.logistics_pipeline_type.simple_one_stage": "Simple One Stage",
1677
+ "enum.logistics_pipeline_type.two_stages": "Two Stages",
1678
+ // Enum: FinalizationType
1679
+ "enum.finalization_type.min": "Minimum",
1680
+ "enum.finalization_type.max": "Maximum",
1681
+ // Enum: BookingStatus
1682
+ "enum.booking_status.new": "New",
1683
+ "enum.booking_status.prepared": "Prepared",
1684
+ "enum.booking_status.queued": "Queued",
1685
+ "enum.booking_status.calculation": "Calculation",
1686
+ "enum.booking_status.cancelled_in_calc": "Cancelled in Calculation",
1687
+ "enum.booking_status.assigned": "Assigned",
1688
+ "enum.booking_status.rejected_by_system": "Rejected by System",
1689
+ "enum.booking_status.enroute": "En Route",
1690
+ "enum.booking_status.completed": "Completed",
1691
+ "enum.booking_status.sent_offer": "Sent Offer",
1692
+ "enum.booking_status.cancelled_by_user": "Cancelled by User",
1693
+ "enum.booking_status.pooling": "Pooling",
1694
+ "enum.booking_status.fail_to_board": "Failed to Board",
1695
+ "enum.booking_status.fail_to_deliver": "Failed to Deliver",
1696
+ "enum.booking_status.linked": "Linked",
1697
+ // Enum: NodeStatus
1698
+ "enum.node_status.new": "New",
1699
+ "enum.node_status.assigned": "Assigned",
1700
+ "enum.node_status.in_service": "In Service",
1701
+ "enum.node_status.completed": "Completed",
1702
+ "enum.node_status.cancelled_by_user": "Cancelled by User",
1703
+ "enum.node_status.dropped_by_algo": "Dropped by Algorithm",
1704
+ "enum.node_status.fail_to_board": "Failed to Board",
1705
+ "enum.node_status.fail_to_deliver": "Failed to Deliver",
1706
+ // Enum: NodeType
1707
+ "enum.node_type.point": "Point",
1708
+ "enum.node_type.pickup": "Pickup",
1709
+ "enum.node_type.dropoff": "Dropoff",
1710
+ "enum.node_type.depot": "Depot",
1711
+ "enum.node_type.vehicle_position": "Vehicle Position",
1712
+ // Enum: SimulationStatus
1713
+ "enum.simulation_status.created": "Created",
1714
+ "enum.simulation_status.queued": "Queued",
1715
+ "enum.simulation_status.running": "Running",
1716
+ "enum.simulation_status.completed": "Completed",
1717
+ "enum.simulation_status.failed": "Failed",
1718
+ "enum.simulation_status.terminated": "Terminated",
1719
+ // Enum: SimulationMode
1720
+ "enum.simulation_mode.real_time": "Real Time",
1721
+ "enum.simulation_mode.fast": "Fast Simulation",
1722
+ "enum.simulation_mode.prebook": "Prebook",
1723
+ "enum.simulation_mode.real_operations": "Real Operations",
1724
+ "enum.simulation_mode.template": "Template",
1725
+ // Enum: BookingType
1726
+ "enum.booking_type.customer": "Customer",
1727
+ "enum.booking_type.break": "Break",
1728
+ "enum.booking_type.pooling": "Pooling",
1729
+ "enum.booking_type.estimate": "Estimate",
1730
+ // Enum: SimulationProcessorState
1731
+ "enum.simulation_processor_state.new": "New",
1732
+ "enum.simulation_processor_state.calculating": "Calculating",
1733
+ "enum.simulation_processor_state.calculated": "Calculated",
1734
+ "enum.simulation_processor_state.completed": "Completed",
1735
+ "enum.simulation_processor_state.failed": "Failed",
1736
+ "enum.vehicle_use_option.enabled": "Enabled",
1737
+ "enum.vehicle_use_option.disabled": "Disabled",
1738
+ // Logistics Settings Form
1739
+ "logistics_settings.section.cost_parameters": "Cost Parameters",
1740
+ "logistics_settings.section.slack_settings": "Slack Settings",
1741
+ "logistics_settings.section.model_parameters": "Model Parameters",
1742
+ "logistics_settings.section.vehicle_late_settings": "Vehicle Late Settings",
1743
+ "logistics_settings.section.calculation_parameters": "Calculation Parameters",
1744
+ "logistics_settings.section.solver_settings": "Solver Settings",
1745
+ "logistics_settings.section.optimization_settings": "Optimization Settings",
1746
+ "logistics_settings.section.logistics_specific": "Logistics Specific Settings",
1747
+ "logistics_settings.section.manual_edit_api": "Manual Edit API Settings",
1748
+ "logistics_settings.section.route_cost_modification": "Route Cost Modification",
1749
+ "logistics_settings.vehicle_cost": "Vehicle Cost",
1750
+ "logistics_settings.trip_cost": "Trip Cost",
1751
+ "logistics_settings.booking_penalty": "Booking Penalty",
1752
+ "logistics_settings.slack_cost": "Slack Cost",
1753
+ "logistics_settings.vehicle_amortized_linear_cost_factor": "Vehicle Amortized Linear Cost Factor",
1754
+ "logistics_settings.vehicle_amortized_quadratic_cost_factor": "Vehicle Amortized Quadratic Cost Factor",
1755
+ "logistics_settings.group_crossing_penalty": "Group Crossing Penalty",
1756
+ "logistics_settings.slack_cost_factor": "Slack Cost Factor",
1757
+ "logistics_settings.max_pickup_slack": "Max Pickup Slack (seconds)",
1758
+ "logistics_settings.max_dropoff_slack": "Max Dropoff Slack (seconds)",
1759
+ "logistics_settings.logistics_optimize_slack": "Optimize Slacks in Logistics Mode",
1760
+ "logistics_settings.should_set_max_slack_start_location_zero": "Set Max Slack of Start Location to Zero",
1761
+ "logistics_settings.use_walking_time_to_reduce_time_windows": "Use Walking Time to Reduce Time Windows",
1762
+ "logistics_settings.use_lifo_order_check": "Use LIFO Order Check",
1763
+ "logistics_settings.lifo_order_check_on_all_vehicles": "LIFO Order Check on All Vehicles",
1764
+ "logistics_settings.algo_optimize_quantity": "Algorithm Optimize Quantity",
1765
+ "logistics_settings.allow_vehicle_late": "Allow Vehicle Late",
1766
+ "logistics_settings.max_possible_lateness": "Max Possible Lateness (seconds)",
1767
+ "logistics_settings.vehicle_late_penalty_coefficient": "Vehicle Late Penalty Coefficient",
1768
+ "logistics_settings.use_node_weights_cost": "Use Node Weights Cost",
1769
+ "logistics_settings.use_path_equalizer": "Use Path Equalizer",
1770
+ "logistics_settings.use_selective_path_equalizer": "Use Selective Path Equalizer",
1771
+ "logistics_settings.use_mixed_time_matrix": "Use Mixed Time Matrix",
1772
+ "logistics_settings.path_equalizer_weight": "Path Equalizer Weight",
1773
+ "logistics_settings.algorithm": "Algorithm",
1774
+ "logistics_settings.first_solution_strategies": "First Solution Strategies",
1775
+ "logistics_settings.first_solution_strategies_second_stage": "First Solution Strategies (Second Stage)",
1776
+ "logistics_settings.time_limit_ms": "Time Limit (ms)",
1777
+ "logistics_settings.time_limit_ms_second_stage": "Time Limit Second Stage (ms)",
1778
+ "logistics_settings.solution_limit": "Solution Limit",
1779
+ "logistics_settings.lns_time_limit_ms": "LNS Time Limit (ms)",
1780
+ "logistics_settings.optimization_step": "Optimization Step",
1781
+ "logistics_settings.guided_local_search_lambda_coefficient": "GLS Lambda Coefficient",
1782
+ "logistics_settings.savings_neighbors_ratio": "Savings Neighbors Ratio",
1783
+ "logistics_settings.waypoints_solution_limit": "Waypoints Solution Limit",
1784
+ "logistics_settings.total_to_furthest_distance_ratio": "Total to Furthest Distance Ratio",
1785
+ "logistics_settings.cvb_local_search_iterations_limit": "CVB Local Search Iterations Limit",
1786
+ "logistics_settings.cvb_fleetmin_iterations_limit": "CVB Fleetmin Iterations Limit",
1787
+ "logistics_settings.cvb_fleetmin_solutions_limit": "CVB Fleetmin Solutions Limit",
1788
+ "logistics_settings.cvb_fleetmin_time_limit": "CVB Fleetmin Time Limit",
1789
+ "logistics_settings.use_local_search_metaheuristic": "Use Local Search Metaheuristic",
1790
+ "logistics_settings.use_tsp_opt": "Use TSP Opt",
1791
+ "logistics_settings.use_depth_first_search": "Use Depth First Search",
1792
+ "logistics_settings.waypoints_optimization_second_phase": "Waypoints Optimization Second Phase",
1793
+ "logistics_settings.use_all_local_search_operators": "Use All Local Search Operators",
1794
+ "logistics_settings.use_cvb_local_search_operator": "Use CVB Local Search Operator",
1795
+ "logistics_settings.log_search": "Log Search",
1796
+ "logistics_settings.use_local_search_operators": "Use Local Search Operators",
1797
+ "logistics_settings.only_pdp": "Only PDP (Pickup-Delivery Problem)",
1798
+ "logistics_settings.should_lock_next_stop_if_vehicle_live": "Lock Next Stop if Vehicle Live",
1799
+ "logistics_settings.should_optimize_fail_to_board_bookings": "Optimize Fail-to-Board Bookings",
1800
+ "logistics_settings.node_grouping_enabled": "Enable Node Grouping",
1801
+ "logistics_settings.exclude_unroutable_bookings": "Exclude Unroutable Bookings",
1802
+ "logistics_settings.pipeline_type": "Pipeline Type",
1803
+ "logistics_settings.geofence_vehicle_allocation_strategy": "Geofence Vehicle Allocation Strategy",
1804
+ "logistics_settings.geofence_definition_strategy": "Geofence Definition Strategy",
1805
+ "logistics_settings.booking_order_prioritization": "Booking Order Prioritization",
1806
+ "logistics_settings.path_constraints_mode": "Path Constraints Mode",
1807
+ "logistics_settings.node_grouping_capacity_strategy": "Node Grouping Capacity Strategy",
1808
+ "logistics_settings.truckban_strategy": "Truckban Strategy",
1809
+ "logistics_settings.average_travel_duration_to_node": "Avg Travel Duration to Node (s)",
1810
+ "logistics_settings.truckban_buffer_time_windows": "Truckban Buffer Time Windows (s)",
1811
+ "logistics_settings.truckban_enabled": "Truckban Enabled",
1812
+ "logistics_settings.allow_upload_after_simulation_start_time": "Allow Upload After Simulation Start Time",
1813
+ "logistics_settings.clear_cumulative_limitations": "Clear Cumulative Limitations",
1814
+ "logistics_settings.section.stateless_api": "Stateless API",
1815
+ "logistics_settings.stateless_api_server": "Server",
1816
+ "logistics_settings.stateless_api_login": "Login",
1817
+ "logistics_settings.stateless_api_password": "Password",
1818
+ "logistics_settings.manual_edit_api_solver_kind": "Manual Edit API Solver Kind",
1819
+ "logistics_settings.manual_edit_finalization_type_pickups": "Manual Edit Finalization Type (Pickups)",
1820
+ "logistics_settings.manual_edit_finalization_type_dropoffs": "Manual Edit Finalization Type (Dropoffs)",
1821
+ "logistics_settings.manual_edit_optimize_quantity": "Manual Edit Optimize Quantity",
1822
+ "logistics_settings.manual_edit_slack_cost_factor": "Manual Edit Slack Cost Factor",
1823
+ "logistics_settings.manual_edit_api_minimize_slack": "Minimize Slack in Manual Edit",
1824
+ "logistics_settings.manual_edit_api_use_vehicle_start_time": "Use Vehicle Start Time in Manual Edit",
1825
+ "logistics_settings.manual_edit_api_vehicle_logistics_optimize_slack": "Vehicle Logistics Optimize Slack in Manual Edit",
1826
+ "logistics_settings.manual_edit_allow_vehicle_late": "Allow Vehicle Late in Manual Edit",
1827
+ "logistics_settings.manual_edit_max_possible_lateness": "Manual Edit Max Lateness (seconds)",
1828
+ "logistics_settings.manual_edit_lateness_penalty_coefficient": "Manual Edit Lateness Penalty",
1829
+ "logistics_settings.route_cost_modification_primary": "Route Cost Modification Primary",
1830
+ "logistics_settings.route_cost_modification_secondary": "Route Cost Modification Secondary",
1831
+ "logistics_settings.placeholder.select_algorithm": "Select algorithm",
1832
+ "logistics_settings.placeholder.select_strategies": "Select strategies",
1833
+ "logistics_settings.placeholder.select_quantity": "Select quantity",
1834
+ "logistics_settings.placeholder.select_pipeline_type": "Select pipeline type",
1835
+ "logistics_settings.placeholder.select_strategy": "Select strategy",
1836
+ "logistics_settings.placeholder.select_prioritization": "Select prioritization",
1837
+ "logistics_settings.placeholder.select_mode": "Select mode",
1838
+ "logistics_settings.placeholder.select_solver_kind": "Select solver kind",
1839
+ "logistics_settings.placeholder.select_finalization_type": "Select finalization type",
1840
+ "logistics_settings.placeholder.select_operators": "Select operators",
1841
+ // Route Cost Modification Editor
1842
+ "route_cost_modification.enabled": "Enabled",
1843
+ "route_cost_modification.disabled": "Disabled",
1844
+ "route_cost_modification.enable_section_message": "Enable this section to configure route cost modifications",
1845
+ "route_cost_modification.time_matrix": "Time Matrix",
1846
+ "route_cost_modification.distance_matrix": "Distance Matrix",
1847
+ "route_cost_modification.linear_coefficient": "Linear Coefficient",
1848
+ "route_cost_modification.polylinear_segment": "Polylinear Segment",
1849
+ "route_cost_modification.relation": "Relation",
1850
+ "route_cost_modification.threshold": "Threshold",
1851
+ "route_cost_modification.penalty_base": "Penalty Base",
1852
+ "route_cost_modification.penalty_rate": "Penalty Rate",
1853
+ "route_cost_modification.ignore_first": "Ignore First",
1854
+ "route_cost_modification.ignore_last": "Ignore Last",
1855
+ "route_cost_modification.add_time_segment": "Add Time Polylinear Segment",
1856
+ "route_cost_modification.add_distance_segment": "Add Distance Polylinear Segment",
1857
+ "route_cost_modification.relation_greater": "Greater",
1858
+ "route_cost_modification.relation_less": "Less",
1859
+ // Async Cell Examples
1860
+ "example.async_cell.basic_title": "Basic AsyncCell",
1861
+ "example.async_cell.basic_desc": "Display project names by ID with automatic batching",
1862
+ "example.async_cell.custom_title": "Custom Rendering",
1863
+ "example.async_cell.custom_desc": "Use a custom render function to display complex data",
1864
+ "example.async_cell.specialized_title": "Specialized Components",
1865
+ "example.async_cell.specialized_desc": "Pre-built components for common use cases",
1866
+ "example.async_cell.loading_title": "With Loading State",
1867
+ "example.async_cell.loading_desc": "Show custom loading and fallback states",
1868
+ // Project Editor Examples
1869
+ "example.project_editor.create_title": "Create New Project",
1870
+ "example.project_editor.create_desc": "Fill in the form to create a new project. The editor uses the dual-API pattern (Tastypie for write, GET API for refresh).",
1871
+ "example.project_editor.create_button": "Create New Project",
1872
+ "example.project_editor.last_created": "Last Created Project:",
1873
+ "example.project_editor.edit_title": "Edit Existing Project",
1874
+ "example.project_editor.edit_desc": "Select a project from the autocomplete dropdown to edit. The editor will load the current data and allow you to update it.",
1875
+ "example.project_editor.select_to_edit": "Select a project to edit:",
1876
+ "example.project_editor.drawer_title": "Editor in Drawer",
1877
+ "example.project_editor.drawer_desc": "Open the editor in a side drawer for a better user experience. This pattern is useful when you want to keep the context visible.",
1878
+ "example.project_editor.open_drawer": "Open Drawer Editor",
1879
+ "example.project_editor.drawer_heading": "Create Project",
1880
+ // React Examples
1881
+ "example.react.title": "Interactive React Example",
1882
+ "example.react.description": "This is a live React component that uses the useSGERP hook with reactive collections. If you haven't connected yet, visit the Try It Out page first.",
1883
+ "example.react.component_title": "Project List Component",
1884
+ "example.react.component_desc": "A simple list component that fetches and displays projects using reactive collections from useSGERP().",
1885
+ "example.react.code_title": "Component Code",
1886
+ "example.react.tab_simplified": "Simplified",
1887
+ "example.react.tab_full": "Full",
1888
+ "example.react.loading": "Loading projects...",
1889
+ "example.react.error": "Error",
1890
+ "example.react.error_connection": "Make sure you have an active connection. Visit the Try It Out page first.",
1891
+ "example.react.no_projects": "No projects found",
1892
+ "example.react.projects": "Projects",
1893
+ "example.react.more_available": "More available",
1894
+ "example.react.all_loaded": "All loaded",
1895
+ "example.react.inactive": "Inactive",
1896
+ "example.react.active": "Active",
1897
+ "example.react.loading_more": "Loading...",
1898
+ "example.react.load_more": "Load More Projects",
1899
+ "example.react.live_component": "This is a live React component using",
1900
+ "example.react.no_connection": "No active connection",
1901
+ // Language Selector Examples
1902
+ "example.language_selector.title": "Language Selector",
1903
+ "example.language_selector.desc": "Select a language from the dropdown. Your preference will be saved and persisted across page refreshes. Watch how the components below change their language.",
1904
+ "example.language_selector.current": "Current Language:",
1905
+ "example.language_selector.login_title": "Login Component (Localized)",
1906
+ "example.language_selector.login_desc": "This login form adapts to the selected language.",
1907
+ "example.language_selector.autocomplete_title": "Autocomplete Component (Localized)",
1908
+ "example.language_selector.autocomplete_desc": "The loading message adapts to the selected language.",
1909
+ "example.language_selector.selected_project": "Selected Project ID:",
1910
+ "example.language_selector.implementation": "Implementation",
1911
+ "example.language_selector.implementation_desc": "Here's how the example above is implemented:",
1912
+ // Login Examples
1913
+ "example.login.title": "Connect to SGERP",
1914
+ "example.login.desc": "Enter your credentials to create and activate a connection. The connection will be saved to localStorage and available across the documentation site.",
1915
+ // Autocomplete Examples
1916
+ "example.autocomplete.project_title": "Project Autocomplete",
1917
+ "example.autocomplete.project_desc": "Search and select a project",
1918
+ "example.autocomplete.selected_project": "Selected Project ID:",
1919
+ "example.autocomplete.dependent_title": "Dependent Autocomplete",
1920
+ "example.autocomplete.dependent_desc": "Select a project above to enable this dropdown. This shows project templates (simulations with mode=template) filtered by project_id.",
1921
+ "example.autocomplete.selected_template": "Selected Template ID:",
1922
+ // Table Examples
1923
+ "example.table.project_title": "Project Table",
1924
+ "example.table.project_desc": "An interactive table with filtering, sorting, column visibility, and infinite scroll",
1925
+ // Map Examples
1926
+ "example.map.operations_title": "Operations Location Map",
1927
+ "example.map.operations_desc": "Interactive map showing operations locations with hover tooltips.",
1928
+ "example.map.features_title": "Features",
1929
+ "example.map.feature_hover": "Hover over locations to see details",
1930
+ "example.map.feature_style": "Change map style using the dropdown (top-left)",
1931
+ "example.map.feature_zoom": "Zoom and pan using mouse or touch",
1932
+ "example.map.feature_updates": "Data automatically updates when collection changes",
1933
+ };