refactor: centralize brand, company info, assets and Persian strings
Phase 1 of turning the game into the company landing page. - Add src/config/company.js with name, tagline, contact, about and the product line, plus a brand palette built around #00a693 (contrast checked); placeholders are marked TODO(company). - Add src/config/assets.js listing every loaded file with its expected format; placeholders are marked TODO(asset). - Move all Persian interface text, dialogue, missions and scenery text into src/i18n/fa.js; components and game code read from it. - Expose the palette as CSS variables (--color-primary and shades) and Tailwind colours, and use it for 3D materials and map drawings. - Fix the arrival line that still called the manager's car a white pickup. - Add tests that block hard-coded Persian text and low-contrast colours. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+457
@@ -0,0 +1,457 @@
|
||||
// Every piece of Persian text the game shows: menus, HUD, prompts, dialogue, missions and the
|
||||
// scenery text painted onto 3D props. Company and product content lives in config/company.js,
|
||||
// and place names come from the map data. To add a language, copy this file with the same keys.
|
||||
// Entries that need values are functions; everything else is a plain string.
|
||||
|
||||
import { COMPANY } from '../config/company.js';
|
||||
|
||||
export const strings = {
|
||||
common: {
|
||||
close: 'بستن',
|
||||
cancel: 'انصراف',
|
||||
gotIt: 'متوجه شدم',
|
||||
mashhad: 'مشهد',
|
||||
iran: 'ایران',
|
||||
walking: 'پیاده',
|
||||
open: 'باز',
|
||||
closed: 'بسته',
|
||||
allDay: 'شبانهروزی',
|
||||
/** @type {(from: string, to: string) => string} */
|
||||
hours: (from, to) => `${from} تا ${to}`,
|
||||
},
|
||||
units: {
|
||||
/** @type {(n: string) => string} */
|
||||
metres: (n) => `${n} متر`,
|
||||
/** @type {(n: string) => string} */
|
||||
kilometres: (n) => `${n} کیلومتر`,
|
||||
/** @type {(n: string) => string} */
|
||||
hetoman: (n) => `${n} هتومان`,
|
||||
/** @type {(n: string) => string} */
|
||||
rial: (n) => `${n} ریال`,
|
||||
hetomanName: 'هتومان',
|
||||
},
|
||||
app: {
|
||||
preparing: 'در حال آمادهسازی بازی…',
|
||||
buildingCity: 'در حال ساختن شهر مشهد…',
|
||||
/** @type {(error: string) => string} */
|
||||
failed: (error) => `بازی اجرا نشد: ${error}`,
|
||||
retry: 'تلاش دوباره',
|
||||
noWebgl: 'مرورگر شما گرافیک سهبعدی (WebGL) را اجرا نمیکند. شتابدهی گرافیکی را فعال کنید.',
|
||||
dataFailed: 'بارگذاری داده ناموفق بود',
|
||||
updateReady: 'نسخهٔ جدید بازی آماده است ',
|
||||
update: 'بهروزرسانی',
|
||||
osmCredit: 'نقشه: © مشارکتکنندگان OpenStreetMap',
|
||||
/** @type {(imagery: string) => string} */
|
||||
osmImageryCredit: (imagery) =>
|
||||
`نقشه: © مشارکتکنندگان OpenStreetMap · تصویر ماهوارهای: ${imagery}`,
|
||||
},
|
||||
briefing: {
|
||||
robotAlt: `روبات راهنمای ${COMPANY.shortName}`,
|
||||
tag: 'عملیات ۰۱ · خراسان رضوی',
|
||||
title: 'عملیات مشهد',
|
||||
subtitle: `${COMPANY.shortName} · شکار دستگاههای وندینگ`,
|
||||
start: 'شروع عملیات',
|
||||
realWorld: '📍 بازی در دنیای واقعی (GPS)',
|
||||
install: '⬇ نصب بازی روی گوشی',
|
||||
keys: 'حرکت: W A S D · دویدن: Shift · دوربین: ماوس · سوار و پیاده شدن: F · خرید: E · نقشه: M',
|
||||
lines: [
|
||||
`نقطهٔ شروع: ${COMPANY.name}، بزرگراه مشهد–چناران`,
|
||||
'تیم: پدر و فرزند · روبات راهنما در دستگاهها منتظر شماست',
|
||||
`هدف: از کارخانه تا بوستان ملت و دانشگاه فردوسی (حدود ۲۰ کیلومتر) بروید و دستگاههای ${COMPANY.shortName} را در پارک، مدرسه، دانشگاه، ایستگاه مترو و مرکز خرید پیدا کنید.`,
|
||||
'هر خرید امتیاز دارد؛ کشف مکان تازه و ترکیب نوشیدنی و خوراکی امتیاز بیشتری دارد.',
|
||||
'بودجه: ۵۰۰ هتومان · مأموریتها پاداش نقدی دارند.',
|
||||
'رفتوآمد: پیاده یا با ماشین. نقشهٔ گوشهٔ صفحه را بزنید تا آدرس دستگاهها را ببینید.',
|
||||
],
|
||||
},
|
||||
toolbar: {
|
||||
showroom: 'مدلهای کارخانه · Q',
|
||||
realWorld: '📍 دنیای واقعی',
|
||||
camera: '📷 دوربین',
|
||||
stableOn: '🎯 پایدار: روشن',
|
||||
stableOff: '🎯 پایدار: خاموش',
|
||||
soundOn: 'صدا: روشن',
|
||||
soundOff: 'صدا: خاموش',
|
||||
soundUnavailable: 'صدا در دسترس نیست',
|
||||
graphics: 'گرافیک',
|
||||
graphicsLow: 'گرافیک: سبک',
|
||||
graphicsHigh: 'گرافیک: کامل',
|
||||
restart: 'شروع دوباره',
|
||||
},
|
||||
status: {
|
||||
budget: 'بودجه',
|
||||
budgetStart: '۵۰۰',
|
||||
clock: 'ساعت',
|
||||
clockStart: '۰۸:۳۰',
|
||||
speed: 'سرعت',
|
||||
speedStart: '۰',
|
||||
rankStart: 'تازهوارد',
|
||||
xpStart: '۰ XP',
|
||||
missions: 'مأموریتها',
|
||||
run: 'دویدن',
|
||||
},
|
||||
hud: {
|
||||
openMap: 'باز کردن نقشهٔ شهر (M)',
|
||||
mapHint: 'نقشه · M',
|
||||
interact: 'تعامل با بازی',
|
||||
compass: { 0: 'شمال', 90: 'شرق', 180: 'جنوب', 270: 'غرب' },
|
||||
// Single-letter north marker on the minimap.
|
||||
minimapNorth: 'ش',
|
||||
/** @type {(name: string) => string} */
|
||||
factory: (name) => `کارخانهٔ ${name}`,
|
||||
/** @type {(street: string) => string} */
|
||||
street: (street) => `مشهد · ${street}`,
|
||||
outskirts: 'حومهٔ مشهد',
|
||||
metroPrefix: 'ایستگاه مترو ',
|
||||
},
|
||||
travel: {
|
||||
onBike: 'روی موتور · F برای پیاده شدن',
|
||||
/** @type {(vehicle: string) => string} */
|
||||
inVehicle: (vehicle) => `در ${vehicle} · F برای پیاده شدن`,
|
||||
},
|
||||
prompts: {
|
||||
/** @type {(model: string) => string} */
|
||||
showroom: (model) => `Q · معرفی ${model} و پرسیدن قیمت`,
|
||||
/** @type {(machine: string) => string} */
|
||||
buy: (machine) => `E · خرید از ${COMPANY.shortName} · ${machine}`,
|
||||
/** @type {(hours: string) => string} */
|
||||
closed: (hours) => `دستگاه بسته است · ${hours}`,
|
||||
/** @type {(vehicle: string) => string} */
|
||||
getIn: (vehicle) => `F · سوار ${vehicle} شو`,
|
||||
getOutNearMachine: 'F · پیاده شو؛ دستگاه نزدیک است',
|
||||
},
|
||||
vehicles: {
|
||||
bmw: 'بیامو',
|
||||
bugatti: 'بوگاتی',
|
||||
lamborghini: 'لامبورگینی',
|
||||
mazda: 'مزدا',
|
||||
nissan: 'نیسان',
|
||||
apache: 'موتور آپاچی',
|
||||
traffic: 'ماشین',
|
||||
},
|
||||
map: {
|
||||
close: 'بستن',
|
||||
help: 'کشیدن: جابهجایی · دو انگشت یا چرخ ماوس: زوم · لمس یا کلیک روی دستگاه: انتخاب',
|
||||
machines: `دستگاههای ${COMPANY.shortName}`,
|
||||
route: 'مسیریابی تا اینجا',
|
||||
routeActive: 'مسیر فعال است ✓',
|
||||
openNow: 'الان باز است',
|
||||
closedNow: 'الان بسته است',
|
||||
/** @type {(hours: string, open: boolean, note: string) => string} */
|
||||
details: (hours, open, note) =>
|
||||
`🕒 ${hours} · ${open ? 'الان باز است' : 'الان بسته است'} · ${note}`,
|
||||
},
|
||||
lists: {
|
||||
drink: 'نوشیدنی',
|
||||
snack: 'خوراکی',
|
||||
noFunds: ' · موجودی کافی نیست',
|
||||
/** @type {(category: string, open: boolean) => string} */
|
||||
machineState: (category, open) => `${category} · ${open ? 'باز' : 'بسته'}`,
|
||||
},
|
||||
install: {
|
||||
title: 'نصب روی آیفون',
|
||||
shareBefore: 'در Safari دکمهٔ ',
|
||||
shareAfter: ' (مربع با فلش رو به بالا) را بزنید.',
|
||||
addBefore: 'گزینهٔ ',
|
||||
addAfter: ' را انتخاب کنید.',
|
||||
note: `${COMPANY.shortName} مثل یک اپ روی صفحهٔ اصلی گوشی شما قرار میگیرد و آفلاین هم اجرا میشود.`,
|
||||
},
|
||||
realIntro: {
|
||||
title: 'بازی در دنیای واقعی',
|
||||
body: `با روشن کردن این حالت، موقعیت گوشی شما (GPS) روی نقشهٔ بازی نمایش داده میشود. وقتی واقعاً به محل یک دستگاه ${COMPANY.shortName} برسید، میتوانید خرید کنید و ۲۰۰ امتیاز اضافه بگیرید.`,
|
||||
safety: [
|
||||
'هنگام راه رفتن به خیابان و ماشینها نگاه کنید، نه به صفحه.',
|
||||
'بچهها فقط همراه یک بزرگتر بازی کنند.',
|
||||
'هنگام رانندگی از این حالت استفاده نکنید؛ در سرعت بالا خرید غیرفعال میشود.',
|
||||
'موقعیت شما فقط روی همین گوشی میماند و جایی ارسال نمیشود.',
|
||||
],
|
||||
accept: 'قبول دارم، شروع کن',
|
||||
},
|
||||
real: {
|
||||
on: 'حالت دنیای واقعی روشن شد؛ از چشم خودمون میبینیم و هر جا راه بریم، توی بازی هم همونجاییم.',
|
||||
/** @type {(problem: string) => string} */
|
||||
cameraFailed: (problem) => `${problem} فعلاً شهر سهبعدی رو از چشم خودمون میبینیم.`,
|
||||
cameraOn: 'دوربین روشن شد! گوشی رو صاف جلوی خودت بگیر؛ ستون نورانی طلایی جای دستگاهه.',
|
||||
noOrientation: 'حسگر جهت گوشی جواب نمیده؛ برای چرخیدن، صفحه رو با انگشت بکش.',
|
||||
noVirtualCar: 'توی حالت دنیای واقعی پیاده راه میریم؛ ماشین مجازی لازم نیست.',
|
||||
locating: 'در حال یافتن موقعیت…',
|
||||
/** @type {(distance: string) => string} */
|
||||
outOfArea: (distance) => `📍 خارج از محدودهٔ بازی · ${distance} تا نزدیکترین دستگاه`,
|
||||
/** @type {(metres: string, fast: boolean) => string} */
|
||||
accuracy: (metres, fast) => `📍 GPS ±${metres} متر${fast ? ' · حرکت سریع' : ''}`,
|
||||
noGps: 'این دستگاه موقعیتیابی (GPS) ندارد.',
|
||||
needsHttps: 'موقعیتیابی فقط روی HTTPS کار میکند؛ بازی را از نشانی https:// باز کنید.',
|
||||
denied:
|
||||
'اجازهٔ دسترسی به موقعیت داده نشد. در تنظیمات مرورگر و گوشی، Location را برای این سایت مجاز کنید. (کد ۱)',
|
||||
unavailable:
|
||||
'موقعیت در دسترس نیست. Location (GPS) گوشی را روشن کنید؛ روی کامپیوتر معمولاً موقعیتیابی کار نمیکند. (کد ۲)',
|
||||
timeout: 'هنوز سیگنال GPS نرسیده… در فضای باز و کنار پنجره سریعتر پیدا میشود. (کد ۳)',
|
||||
cameraNeedsHttps: 'این مرورگر به دوربین دسترسی نمیدهد (HTTPS لازم است).',
|
||||
cameraDenied: 'اجازهٔ دوربین داده نشد؛ از تنظیمات مرورگر اجازه بدهید.',
|
||||
cameraBusy: 'دوربین باز نشد؛ برنامهٔ دیگری از آن استفاده نمیکند؟',
|
||||
},
|
||||
shop: {
|
||||
close: 'بستن',
|
||||
note: '۱۰ هتومان = ۱۰۰٬۰۰۰ ریال · مبالغ نمایشیاند و پرداخت واقعی انجام نمیشود.',
|
||||
/** @type {(icon: string, category: string, hours: string) => string} */
|
||||
category: (icon, category, hours) => `${icon} ${category} · ساعت کاری ${hours}`,
|
||||
/** @type {(machine: string) => string} */
|
||||
title: (machine) => `${COMPANY.shortName} · ${machine}`,
|
||||
/** @type {(note: string, balance: string) => string} */
|
||||
balance: (note, balance) => `${note} · موجودی شما: ${balance}`,
|
||||
},
|
||||
payment: {
|
||||
reader: `کارتخوان ${COMPANY.shortName}`,
|
||||
swipe: 'کشیدن کارت · C',
|
||||
approaching: 'در حال نزدیک شدن به کارتخوان…',
|
||||
success: 'پرداخت موفق ✓ محصول در حال تحویل است',
|
||||
swipeHint: 'کارت را بکشید: دکمهٔ «کشیدن کارت» یا کلید C',
|
||||
realPurchase: 'خرید در دنیای واقعی',
|
||||
},
|
||||
rewards: {
|
||||
missionDone: 'مأموریت انجام شد',
|
||||
/** @type {(xp: string, cash: string) => string} */
|
||||
missionReward: (xp, cash) => `+${xp} XP · +${cash} پاداش`,
|
||||
rankUp: 'ارتقای درجه',
|
||||
findMore: 'دستگاههای بیشتری پیدا کن',
|
||||
},
|
||||
end: {
|
||||
title: 'پایان عملیات',
|
||||
again: 'عملیات دوباره',
|
||||
keepExploring: 'ادامهٔ گشت در شهر',
|
||||
success: 'عملیات موفق',
|
||||
outOfBudget: 'پایان بودجه',
|
||||
successHeading: 'عملیات مشهد کامل شد!',
|
||||
budgetHeading: 'بودجهٔ امروز تمام شد',
|
||||
successText:
|
||||
'همهٔ مأموریتهای محدودهٔ بوستان ملت انجام شد. مناطق دیگر مشهد بهزودی باز میشوند.',
|
||||
budgetText: 'دیگر نمیتوانید از دستگاهها خرید کنید. امتیاز امروز:',
|
||||
score: 'امتیاز',
|
||||
rank: 'درجه',
|
||||
purchases: 'خریدها',
|
||||
places: 'مکانهای کشفشده',
|
||||
missions: 'مأموریتها',
|
||||
remaining: 'باقیمانده',
|
||||
/** @type {(done: string, total: string) => string} */
|
||||
outOf: (done, total) => `${done} از ${total}`,
|
||||
},
|
||||
showroom: {
|
||||
/** @type {(model: string) => string} */
|
||||
heading: (model) => `نمایشگاه کارخانه · ${model}`,
|
||||
close: 'بستن معرفی دستگاه',
|
||||
models: 'مدل دستگاه',
|
||||
/** @type {(price: string) => string} */
|
||||
price: (price) => `قیمت خود دستگاه: ${price}`,
|
||||
displayOnly: 'این بخش معرفی محصول است؛ خرید واقعی انجام نمیشود و بودجهٔ هتومان تغییر نمیکند.',
|
||||
askPrice: 'روبات، قیمتش چنده؟',
|
||||
askFeatures: 'روبات، امکاناتش چیه؟',
|
||||
robotAlt: 'روبات راهنمای نمایشگاه',
|
||||
greeting: 'روبات: سلام! دربارهٔ قیمت و امکانات این مدل از من بپرس.',
|
||||
allModels: 'روبات: سلام! قیمت و امکانات هر سه مدل را میتوانم توضیح بدهم.',
|
||||
whatToKnow: 'روبات: دربارهٔ این مدل چی میخواهی بدانی؟',
|
||||
/** @type {(answer: string) => string} */
|
||||
robotSays: (answer) => `روبات: ${answer}`,
|
||||
noImage: 'نمای سهبعدی این مدل داخل کارخانه موجود است؛ فایل تصویر هنوز اضافه نشده.',
|
||||
views: { image: 'نمای اصلی', imageAlt: 'رنگ سفید', gif: 'نمای متحرک' },
|
||||
/** @type {(model: string, price: string) => string} */
|
||||
priceAnswer: (model, price) =>
|
||||
`قیمت ${model}، ${price} است. این قیمت خود دستگاه به ریال است و از بودجهٔ بازی کم نمیشود.`,
|
||||
/** @type {(model: string, description: string, features: string) => string} */
|
||||
featuresAnswer: (model, description, features) =>
|
||||
`${model}: ${description} امکانات: ${features}.`,
|
||||
featureSeparator: '، ',
|
||||
},
|
||||
speakers: { robot: 'روبات', father: 'پدر', child: 'بچه' },
|
||||
dialogue: {
|
||||
showroomIntro: `سه نمونهٔ ۳۵، ۴۸ و ۶۰ کانال توی حیاط کنار ماشین هستند. دکمهٔ مدلهای کارخانه یا Q را بزن تا قیمت و امکاناتشان را بگویم.`,
|
||||
childAsksFactory: `بابا، اینجا همون کارخونهایه که دستگاههای ${COMPANY.shortName} رو میسازه؟`,
|
||||
fatherAnswersFactory:
|
||||
'آره! سالن تولید اونوره؛ دستگاه وندینگ هم توی دفتر فنی مهندسیه. بریم ببینیم!',
|
||||
childAsksArrival: 'اون ماشین مشکیه کیه داره میاد تو؟',
|
||||
fatherAnswersArrival: 'آقای محمدیه، مدیر شرکت. بعداً بریم اتاقش سلام کنیم.',
|
||||
robotHello: `سلام! من روبات راهنمای ${COMPANY.shortName}م؛ تو دستگاه دفتر فنی زندگی میکنم!`,
|
||||
/** @type {(company: string) => string} */
|
||||
robotWelcome: (company) =>
|
||||
`به ${company} خوش اومدین. بچههای همین دفتر نرمافزار دستگاهها رو مینویسن.`,
|
||||
robotFirstBuy: 'اول از همین دستگاه یه چیزی بخرین؛ کلید E رو بزنین.',
|
||||
robotGoToPark:
|
||||
'ماشینتون جلوی همین ساختمونه. با F سوار شین و برین بوستان ملت؛ من توی همهٔ دستگاهها منتظرتونم!',
|
||||
/** @type {(hours: string) => string} */
|
||||
robotClosed: (hours) => `سلام! متأسفم، این دستگاه الان بسته است. ساعت کاری: ${hours}.`,
|
||||
/** @type {(machine: string) => string} */
|
||||
robotWelcomeBack: (machine) => `سلام دوباره! به دستگاه ${machine} خوش اومدین.`,
|
||||
/** @type {(note: string) => string} */
|
||||
robotNote: (note) => `${note}. برای خرید E رو بزنین.`,
|
||||
robotAgain: 'باز هم خوش اومدین! برای خرید E رو بزنین.',
|
||||
robotBye: 'خداحافظ! مسیر طلایی رو دنبال کنین.',
|
||||
/** @type {(machine: string, hours: string) => string} */
|
||||
targetClosed: (machine, hours) =>
|
||||
`${machine} الان بسته است (${hours}). از نقشه مقصد دیگری انتخاب کن.`,
|
||||
longWay: 'راه طولانیه؛ بهتره با ماشین بریم.',
|
||||
bikeOn: 'کلاه ایمنی سرت باشه! با موتور میشه از لای ماشینها رد شد.',
|
||||
carOn: 'کمربندها رو ببندیم! مسیر طلایی روی زمین راه رو نشون میده.',
|
||||
stopFirst: 'اول نگه دار، بعد پیاده میشویم.',
|
||||
tooFastToBuy: 'داریم سریع حرکت میکنیم؛ اول بایستیم، بعد خرید کنیم.',
|
||||
/** @type {(hours: string) => string} */
|
||||
machineClosed: (hours) => `این دستگاه الان بسته است. ساعت کاری: ${hours}.`,
|
||||
childSwipes: 'بابا، کارت رو بده من بکشم!',
|
||||
/** @type {(icon: string, product: string) => string} */
|
||||
childGotIt: (icon, product) => `${icon} ${product} گرفتم! مرسی بابا.`,
|
||||
/** @type {(mission: string) => string} */
|
||||
nextMission: (mission) => `مأموریت بعدی: ${mission}`,
|
||||
/** @type {(machine: string, distance: string) => string} */
|
||||
routeSet: (machine, distance) =>
|
||||
`مسیر تا ${machine} رو گذاشتم؛ ${distance}. دنبال خط طلایی بریم.`,
|
||||
},
|
||||
ranks: ['تازهوارد', 'کاوشگر', 'راهبلد', 'شکارچی دستگاه', 'استاد نقشه', 'افسانهٔ مشهد'],
|
||||
bonuses: {
|
||||
purchase: 'خرید موفق',
|
||||
newPlace: 'کشف مکان جدید',
|
||||
combo: 'ترکیب نوشیدنی و خوراکی',
|
||||
allCategories: 'همهٔ انواع مکان',
|
||||
},
|
||||
missions: {
|
||||
factory: 'در دفتر فنی مهندسی کارخانه از دستگاه وندینگ خرید کن',
|
||||
first: 'با ماشین تا بوستان ملت برو و اولین خرید شهری را انجام بده',
|
||||
school: 'قبل از تعطیلی مدرسه (۱۳:۳۰) از دستگاه مدرسه خرید کن',
|
||||
campus: 'به دانشگاه فردوسی برو و یک خوراکی بخر',
|
||||
metro: 'از دستگاه ایستگاه مترو آزادی خرید کن',
|
||||
mall: 'با ماشین تا مشهد مال برو و خرید کن',
|
||||
explorer: 'از ۵ مکان متفاوت شهر خرید کن',
|
||||
},
|
||||
snacks: {
|
||||
juice: 'آبمیوه',
|
||||
water: 'آب معدنی',
|
||||
milk: 'شیر کاکائو',
|
||||
tea: 'چای سرد',
|
||||
lemonade: 'لیموناد',
|
||||
biscuit: 'بیسکویت',
|
||||
chocolate: 'شکلات',
|
||||
nuts: 'آجیل',
|
||||
cake: 'کیک',
|
||||
},
|
||||
categories: {
|
||||
factory: 'کارخانه',
|
||||
park: 'پارک',
|
||||
university: 'دانشگاه',
|
||||
school: 'مدرسه',
|
||||
metro: 'ایستگاه مترو',
|
||||
mall: 'مرکز خرید',
|
||||
test: 'نقطهٔ آزمایشی GPS',
|
||||
},
|
||||
places: {
|
||||
officeMachine: 'دستگاه دفتر فنی مهندسی',
|
||||
/** @type {(address: string) => string} */
|
||||
officeAddress: (address) => `${address}، ساختمان اداری، دفتر فنی مهندسی`,
|
||||
officeNote: 'دستگاه دفتر برنامهنویسها؛ نصف قیمت برای مهمانهای کارخانه',
|
||||
/** @type {(n: string) => string} */
|
||||
testPoint: (n) => `نقطهٔ آزمایشی ${n}`,
|
||||
/** @type {(coords: string) => string} */
|
||||
testAddress: (coords) => `کنار کارخانهٔ ${COMPANY.shortName} · ${coords}`,
|
||||
testNote: 'برای آزمایش حالت دنیای واقعی: با گوشی تا اینجا راه بروید',
|
||||
comingSoon: 'خارج از محدودهٔ فعلی · بهزودی',
|
||||
parkSign: 'بوستان ملت',
|
||||
},
|
||||
cities: {
|
||||
mashhad: 'مشهد',
|
||||
tehran: 'تهران',
|
||||
isfahan: 'اصفهان',
|
||||
shiraz: 'شیراز',
|
||||
tabriz: 'تبریز',
|
||||
ahvaz: 'اهواز',
|
||||
kerman: 'کرمان',
|
||||
rasht: 'رشت',
|
||||
yazd: 'یزد',
|
||||
zahedan: 'زاهدان',
|
||||
kermanshah: 'کرمانشاه',
|
||||
bandarAbbas: 'بندرعباس',
|
||||
},
|
||||
factory: {
|
||||
readyToInstall: 'آمادهٔ نصب',
|
||||
zones: [
|
||||
['خمکاری', 'ورقکاری بدنهٔ دستگاه'],
|
||||
['برش لیزر', 'برش ورق و قطعات'],
|
||||
['رنگکاری', 'کابین رنگ پودری'],
|
||||
['یخچالسازی', 'کمپرسور و عایقکاری'],
|
||||
['مونتاژ', 'خط مونتاژ نهایی'],
|
||||
['بستهبندی', 'ارسال به شهر'],
|
||||
],
|
||||
signs: {
|
||||
engineering: ['دفتر فنی مهندسی', 'Engineering'],
|
||||
accounting: ['واحد حسابداری', 'Accounting'],
|
||||
management: ['مدیریت', 'آقای محمدی'],
|
||||
nameplate: ['محمدی', 'مدیر شرکت'],
|
||||
},
|
||||
manager: { name: 'آقای محمدی', role: 'مدیر شرکت' },
|
||||
staff: {
|
||||
hamed: {
|
||||
name: 'حامد',
|
||||
lines: [
|
||||
'سلام! من حامدم. رابط کاربری صفحهٔ لمسی دستگاهها رو با React میسازم.',
|
||||
'هر چی روی صفحهٔ دستگاه میبینین، از همین مانیتور اومده!',
|
||||
],
|
||||
},
|
||||
ryan: {
|
||||
name: 'رایان',
|
||||
lines: ['سلام! من رایانم. سرور پرداخت و گزارش فروش دستگاهها رو با Go مینویسم.'],
|
||||
},
|
||||
alireza: {
|
||||
name: 'علیرضا',
|
||||
lines: [
|
||||
'سلام! علیرضام. فریمور بُرد کنترل دستگاه با C++ ـه؛ الان دارم موتورهای تحویل کالا رو تنظیم میکنم.',
|
||||
],
|
||||
},
|
||||
reza: {
|
||||
name: 'رضا',
|
||||
lines: [
|
||||
'سلام، خوش اومدین. من رضام؛ کد C++ سنسورها و دمای یخچال دستگاه با منه.',
|
||||
'دستگاه وندینگ همین دفتر کنار دره؛ از اون خرید کنین!',
|
||||
],
|
||||
},
|
||||
mohammad: {
|
||||
name: 'محمد',
|
||||
lines: [`سلام! من محمدم. به دفتر فنی مهندسی ${COMPANY.shortName} خوش اومدین!`],
|
||||
},
|
||||
},
|
||||
accounting: {
|
||||
label: 'واحد حسابداری',
|
||||
lines: ['سلام! اینجا فروش همهٔ دستگاهها ثبت میشه. هر خریدی بکنین، فاکتورش اینجا میاد!'],
|
||||
},
|
||||
managerLines: [
|
||||
`سلام، خوش اومدین! من محمدیام، مدیر ${COMPANY.shortName}.`,
|
||||
'امروز چهل نفر توی سالن تولید کار میکنن: خمکاری، برش، رنگ، یخچالسازی و مونتاژ.',
|
||||
'یه سر به دفتر فنی بزنین و از دستگاهش خرید کنین؛ بعد برین سراغ دستگاههای شهر!',
|
||||
],
|
||||
truck: 'بابا ببین! کامیون داره دستگاههای بستهبندیشده رو بار میزنه که ببره شهر!',
|
||||
// One comment per production area, spoken the first time the family walks in.
|
||||
areaTalks: [
|
||||
'اینجا خمکاریه؛ ورقهای فلزی بدنهٔ دستگاه رو با پرس خم میکنن.',
|
||||
'دستگاه برش لیزر رو ببین! ورق رو مثل کاغذ میبُره.',
|
||||
`این کابین رنگه؛ بدنهها اینجا رنگ برند ${COMPANY.shortName} رو میگیرن.`,
|
||||
'یخچالسازی! برای همینه که نوشیدنیهای دستگاه همیشه خنکن.',
|
||||
'خط مونتاژ: روباتها و کارگرها قطعهها رو کنار هم میذارن و دستگاه کامل میشه.',
|
||||
],
|
||||
// Scenery text painted on office screens and boards.
|
||||
decor: {
|
||||
invoices: [
|
||||
'فاکتور دستگاه مبلغ',
|
||||
'۱۰۴۲ بوستان ملت ۴۸۰',
|
||||
'۱۰۴۳ دانشگاه فردوسی ۳۲۰',
|
||||
'۱۰۴۴ مترو آزادی ۲۹۰',
|
||||
'۱۰۴۵ مشهد مال ۶۱۰',
|
||||
'۱۰۴۶ مدرسه راحیل ۱۸۰',
|
||||
'جمع ۱۸۸۰',
|
||||
],
|
||||
dashboard: [
|
||||
'فروش امروز: ۱۲۸ دستگاه',
|
||||
'تولید هفته: ۴۶ دستگاه',
|
||||
'ارسال شده: ۳۸',
|
||||
'',
|
||||
'▇▇▇▇▇▇▇▇▇▇▇ خم',
|
||||
'▇▇▇▇▇▇▇▇▇ برش',
|
||||
'▇▇▇▇▇▇▇ رنگ',
|
||||
],
|
||||
sprintTitle: 'اسپرینت ۱۴: دستگاه نسل جدید',
|
||||
sprintItems: ['صفحهٔ لمسی جدید ← React', 'سرویس پرداخت ← Go', 'فریمور موتور و سنسور ← C++'],
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user