TaleMane
🕒 {{ t('asOfBanner', { d: data.as_of }) }}
…

{{ part }}

{{ t('taglineSub') }}

{{ auth.error }}

{{ t('orgChart') }}

{{ t('noData') }} {{ t('navImport') }}

{{ t('noDeptPeople', { n: unassignedIn(orgAssign).length }) }}

{{ deptForm.id ? t('editDept') : t('addDept') }}

{{ t('navPeople') }} {{ data.employees.length }}

{{ t('f_emp_code') }}{{ t('f_name') }}{{ t('dept') }}{{ t('f_title') }}{{ t('f_grade') }}{{ t('f_gender') }}{{ t('age') }}{{ t('f_salary') }}
{{ e.emp_code }}{{ e.name }}{{ deptPath(e.dept_id) }}{{ e.title }}{{ e.grade }} {{ genderLabel(e.gender) }}{{ e.age ?? '' }}{{ money(e.salary) }}

{{ t('noMatchPeople') }}

{{ t('reportsTitle') }}

{{ t('noReports') }}

{{ rp.def.name }}

{{ rp.def.description }}

⬇ CSV
{{ t('rpDataAsOf', { d: rp.view.snapshot.as_of, n: rp.view.snapshot.rows }) }} {{ t('rpNoData') }} {{ rp.view.master_as_of ? t('rpMasterAsOf', { d: rp.view.master_as_of }) : t('rpMasterLatest') }} 🔒 {{ t('rpHidden', { n: rp.view.hidden_columns }) }}
{{ t('rpRows', { n: rpRows.length }) }}
ƒ{{ c.name }}🔒{{ sensLabel(c.sens) }}{{ rp.sort.dir > 0 ? ' ▲' : ' ▼' }}
{{ fmtCell(r.v[i], c) }} ⚠
{{ t('rpHistory') }}({{ rp.snapshots.length }})
{{ sn.as_of }}{{ t('snapPeople', { n: sn.row_count }) }} {{ sn.file_name }} ・ {{ String(sn.created_at).slice(0, 16) }}{{ sn.created_by ? ' ・ ' + sn.created_by : '' }}

{{ t('navImport') }}

{{ t('err.forbidden') }}

{{ t('navSim') }}

{{ t('simHint') }}

{{ e.name }} {{ e.title }} {{ e.grade }}

{{ deptPath(e.dept_id) }}

{{ t('compare') }}

{{ t('dept') }}{{ t('headcount') }}{{ t('laborCost') }}{{ t('avgAge') }}{{ t('femaleRatio') }}
{{ row.name }} {{ row.b.count }} → {{ row.a.count }} {{ moneyShort(row.b.salary) }} → {{ moneyShort(row.a.salary) }} {{ fmtNum(row.b.avgAge) }} → {{ fmtNum(row.a.avgAge) }} {{ pct(row.b.female, row.b.gendered) }} → {{ pct(row.a.female, row.a.gendered) }}

{{ t('gradeMix') }}

{{ t('dept') }}{{ g }}
{{ row.name }}{{ row.b.grades[g] || 0 }}→{{ row.a.grades[g] || 0 }}

{{ t('noChanges') }}

{{ t('compareNote') }}

{{ t('orgAfter') }}

← {{ t('backToPeople') }}

{{ personError || '…' }}

{{ t('navSettings') }}

{{ t('myPerms') }}

{{ t('role_' + me.role) }} ・ {{ t('permsGroups', { g: perms.groups.join('、') }) }} ・ {{ t('scopeLimited') }}

{{ t('sumFields') }}: {{ SENS.filter(k => perms.fields[k]).map(k => t('sens_' + k)).join('・') || t('none') }} / {{ t('sumFuncs') }}: {{ FUNCS.filter(k => perms.funcs[k]).map(k => t('fn_' + k).replace(/(.*|\(.*/, '')).join('・') || t('none') }}

{{ t('members') }}

{{ m.name }}{{ m.email }} {{ t('role_owner') }}

{{ t('rolesNote') }}

{{ t('groupsTitle') }}

{{ t('groupsDesc') }}

{{ t('defaultAccess') }}

{{ t('groupNone') }}

{{ g.name }} {{ t('peopleN', { n: g.members.length }) }}

{{ g.note }}

{{ permSummary(g.perms) }}

{{ t('groupMembers') }}
{{ t('groupNoMembers') }}
{{ t('gDepts') }}
{{ t('gFields') }}
{{ t('gFuncs') }}
{{ t('gReports') }}
—

{{ t('linksTitle') }}

{{ t('linksNote') }}

{{ l.app }}{{ l.label }} {{ t('linkedBy') }}: {{ l.user_name || '—' }} ・ {{ l.created_at.slice(0, 16) }} {{ t('linkWithPay') }}

{{ t('changePassword') }}

{{ t('dangerZone') }}

{{ empForm.id ? t('editEmployee') : t('addEmployee') }}

{{ t('editHistoryNote') }}

{{ t('diffTitle') }}

{{ diffView.diff.counts[k] }}

{{ t('diff' + k[0].toUpperCase() + k.slice(1)) }}

{{ t('diffNewDepts', { n: diffView.new_departments }) }}

⚠ {{ t('resUnknown', { n: diffView.unknown_count, ex: diffView.unknown.slice(0, 5).join(', ') }) }}

+ {{ t('diffAdded') }}

{{ e.emp_code }} {{ e.name }} {{ e.dept }}

{{ t('diffMore', { n: diffView.diff.counts.added - 50 }) }}

✎ {{ t('diffChanged') }}

{{ e.emp_code }} {{ e.name }} {{ t('fld_' + c.field) }}: {{ c.from ?? '—' }} → {{ c.to ?? '—' }}

{{ t('diffMore', { n: diffView.diff.counts.changed - 80 }) }}

− {{ t('diffRemoved') }}

{{ e.emp_code }} {{ e.name }} {{ e.dept }}

{{ t('diffMore', { n: diffView.diff.counts.removed - 50 }) }}

{{ t('diffNone') }}

{{ ed.id ? t('rpEdit') : t('newReport') }}

{{ t('rpColumns') }}

{{ t('kind_' + c.kind) }} 🔒 {{ t('lockedCol') }}

{{ t('formulaHelp') }}

{{ t('insertCol') }}
{{ t('exposeTitle') }}

{{ t('upTitle', { n: rp.def.name }) }}

{{ up.fileName }}({{ up.rows.length }})

{{ t('csvHint') }}

{{ up.error }}

{{ toast }}