@things-factory/organization 10.1.223 → 10.1.227

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 (69) hide show
  1. package/dist-client/pages/employee-profile/employee-profile-files.d.ts +23 -0
  2. package/dist-client/pages/employee-profile/employee-profile-files.js +50 -0
  3. package/dist-client/pages/employee-profile/employee-profile-files.js.map +1 -0
  4. package/dist-client/pages/employee-profile/employee-profile-form.d.ts +63 -0
  5. package/dist-client/pages/employee-profile/employee-profile-form.js +132 -0
  6. package/dist-client/pages/employee-profile/employee-profile-form.js.map +1 -0
  7. package/dist-client/pages/employee-profile/employee-profile-list-page.d.ts +52 -0
  8. package/dist-client/pages/employee-profile/employee-profile-list-page.js +206 -0
  9. package/dist-client/pages/employee-profile/employee-profile-list-page.js.map +1 -0
  10. package/dist-client/pages/employee-profile/employee-profile-preview.d.ts +28 -0
  11. package/dist-client/pages/employee-profile/employee-profile-preview.js +179 -0
  12. package/dist-client/pages/employee-profile/employee-profile-preview.js.map +1 -0
  13. package/dist-client/pages/employee-profile/my-employee-profile-page.d.ts +56 -0
  14. package/dist-client/pages/employee-profile/my-employee-profile-page.js +656 -0
  15. package/dist-client/pages/employee-profile/my-employee-profile-page.js.map +1 -0
  16. package/dist-client/route.d.ts +1 -1
  17. package/dist-client/route.js +7 -0
  18. package/dist-client/route.js.map +1 -1
  19. package/dist-client/tsconfig.tsbuildinfo +1 -1
  20. package/dist-server/ai-entry/employee-profile-entry.d.ts +10 -0
  21. package/dist-server/ai-entry/employee-profile-entry.js +88 -0
  22. package/dist-server/ai-entry/employee-profile-entry.js.map +1 -0
  23. package/dist-server/ai-entry/entry-target-shape.d.ts +11 -1
  24. package/dist-server/ai-entry/entry-target-shape.js.map +1 -1
  25. package/dist-server/ai-entry/organization-entry-targets.d.ts +8 -0
  26. package/dist-server/ai-entry/organization-entry-targets.js +26 -1
  27. package/dist-server/ai-entry/organization-entry-targets.js.map +1 -1
  28. package/dist-server/role-tasks.js +4 -1
  29. package/dist-server/role-tasks.js.map +1 -1
  30. package/dist-server/service/employee-profile/employee-profile-document.d.ts +122 -0
  31. package/dist-server/service/employee-profile/employee-profile-document.js +439 -0
  32. package/dist-server/service/employee-profile/employee-profile-document.js.map +1 -0
  33. package/dist-server/service/employee-profile/employee-profile-mutation.d.ts +6 -0
  34. package/dist-server/service/employee-profile/employee-profile-mutation.js +74 -0
  35. package/dist-server/service/employee-profile/employee-profile-mutation.js.map +1 -0
  36. package/dist-server/service/employee-profile/employee-profile-query.d.ts +14 -0
  37. package/dist-server/service/employee-profile/employee-profile-query.js +137 -0
  38. package/dist-server/service/employee-profile/employee-profile-query.js.map +1 -0
  39. package/dist-server/service/employee-profile/employee-profile-rows.d.ts +29 -0
  40. package/dist-server/service/employee-profile/employee-profile-rows.js +122 -0
  41. package/dist-server/service/employee-profile/employee-profile-rows.js.map +1 -0
  42. package/dist-server/service/employee-profile/employee-profile-rules.d.ts +61 -0
  43. package/dist-server/service/employee-profile/employee-profile-rules.js +104 -0
  44. package/dist-server/service/employee-profile/employee-profile-rules.js.map +1 -0
  45. package/dist-server/service/employee-profile/employee-profile-type.d.ts +35 -0
  46. package/dist-server/service/employee-profile/employee-profile-type.js +110 -0
  47. package/dist-server/service/employee-profile/employee-profile-type.js.map +1 -0
  48. package/dist-server/service/employee-profile/employee-profile.d.ts +24 -0
  49. package/dist-server/service/employee-profile/employee-profile.js +112 -0
  50. package/dist-server/service/employee-profile/employee-profile.js.map +1 -0
  51. package/dist-server/service/employee-profile/index.d.ts +5 -0
  52. package/dist-server/service/employee-profile/index.js +9 -0
  53. package/dist-server/service/employee-profile/index.js.map +1 -0
  54. package/dist-server/service/index.d.ts +3 -2
  55. package/dist-server/service/index.js +6 -2
  56. package/dist-server/service/index.js.map +1 -1
  57. package/dist-server/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +8 -6
  59. package/tests/employee-profile-db.test.ts +247 -0
  60. package/tests/employee-profile-document.test.ts +219 -0
  61. package/tests/employee-profile-entry.test.ts +72 -0
  62. package/tests/employee-profile-rules.test.ts +103 -0
  63. package/things-factory.config.js +3 -0
  64. package/translations/en.json +78 -1
  65. package/translations/es.json +78 -1
  66. package/translations/ja.json +78 -1
  67. package/translations/ko.json +78 -1
  68. package/translations/ms.json +78 -1
  69. package/translations/zh.json +78 -1
@@ -0,0 +1,103 @@
1
+ import { employeesWithProfiles, isActiveEmployee, profileDocumentOf, PROFILE_ROW_FIELDS } from '../server/service/employee-profile/employee-profile-rules'
2
+ import { addSkills, blankRow, completenessOf, headlineOf, periodLabelOf, PROFILE_SECTIONS, profileFormOf, profileInputOf } from '../client/pages/employee-profile/employee-profile-form'
3
+
4
+ /** The employee's profile is saved whole, as the screen holds it (ADR-0169 decision 2). */
5
+ describe("an employee's profile as it is saved", () => {
6
+ it('★ blank rows the screen added and did not fill go; the rest are trimmed and keep only their own fields', () => {
7
+ const saved = profileDocumentOf({
8
+ summary: ' 백엔드 10년 ',
9
+ skills: [' TypeScript ', 'PostgreSQL', '', 'TypeScript'],
10
+ educations: [{ school: ' 서울대 ', major: '컴퓨터공학', degree: '', startedOn: '2005-03', endedOn: '2009-02', salary: 1 }, { school: ' ', major: '' }],
11
+ certificates: [{}],
12
+ careers: null,
13
+ projects: [{ name: 'MES 구축', client: '미라텍', technologies: 'Node' }]
14
+ })
15
+ expect(saved).toEqual({
16
+ summary: '백엔드 10년',
17
+ skills: ['TypeScript', 'PostgreSQL'],
18
+ educations: [{ school: '서울대', major: '컴퓨터공학', startedOn: '2005-03', endedOn: '2009-02' }],
19
+ certificates: [],
20
+ careers: [],
21
+ projects: [{ name: 'MES 구축', client: '미라텍', technologies: 'Node' }]
22
+ })
23
+ })
24
+
25
+ it('an empty document empties the profile', () => {
26
+ expect(profileDocumentOf({})).toEqual({ summary: null, skills: [], educations: [], certificates: [], careers: [], projects: [] })
27
+ expect(profileDocumentOf(null)).toEqual({ summary: null, skills: [], educations: [], certificates: [], careers: [], projects: [] })
28
+ })
29
+
30
+ it('★ the screen edits exactly the fields the server keeps, section by section', () => {
31
+ for (const section of PROFILE_SECTIONS) {
32
+ expect([section.key, section.fields.map(field => field.name).sort()]).toEqual([section.key, [...PROFILE_ROW_FIELDS[section.key]].sort()])
33
+ }
34
+ expect(PROFILE_SECTIONS.map(section => section.key).sort()).toEqual(Object.keys(PROFILE_ROW_FIELDS).sort())
35
+ })
36
+
37
+ it('skills are added as typed - split at commas and line ends, no repeat whatever the case', () => {
38
+ expect(addSkills(['Java'], ' java, Spring ,,\nKotlin, spring ')).toEqual(['Java', 'Spring', 'Kotlin'])
39
+ const form = profileFormOf({ summary: 'S', skills: ['A', 'B'], projects: [{ name: 'P', other: 'x' }] })
40
+ expect(form.skills).toEqual(['A', 'B'])
41
+ expect(profileInputOf(form).skills).toEqual(['A', 'B'])
42
+ expect(profileFormOf(null)).toEqual({ summary: '', skills: [], educations: [], certificates: [], careers: [], projects: [] })
43
+ })
44
+
45
+ it('★ a job or project begun and not ended is going on; going on is never sent, and sends no end', () => {
46
+ const form = profileFormOf({ projects: [{ name: 'P', startedOn: '2024-01', endedOn: null, other: 'x' }], careers: [{ company: 'A', startedOn: '2020-01', endedOn: '2023-12' }] })
47
+ expect(form.projects).toEqual([{ name: 'P', client: '', role: '', startedOn: '2024-01', endedOn: '', technologies: '', duties: '', ongoing: 'true' }])
48
+ expect(form.careers[0].ongoing).toBe('')
49
+ const sent = profileInputOf({ ...form, careers: [{ ...form.careers[0], ongoing: 'true' }] })
50
+ expect(sent.careers).toEqual([{ company: 'A', department: '', position: '', startedOn: '2020-01', endedOn: '', duties: '' }])
51
+ expect(sent.projects[0]).not.toHaveProperty('ongoing')
52
+ const projects = PROFILE_SECTIONS.find(section => section.key === 'projects')!
53
+ expect(blankRow(projects)).toHaveProperty('ongoing', '')
54
+ expect(blankRow(PROFILE_SECTIONS.find(section => section.key === 'certificates')!)).toEqual({ name: '', issuer: '', acquiredOn: '' })
55
+ })
56
+
57
+ it("a row's headline and period in one line each", () => {
58
+ const projects = PROFILE_SECTIONS.find(section => section.key === 'projects')!
59
+ expect(headlineOf(projects, { name: '미라텍 MES', client: '', role: 'PM' })).toBe('미라텍 MES · PM')
60
+ expect(periodLabelOf({ startedOn: '2024-01', endedOn: '', ongoing: 'true' }, '현재')).toBe('2024.01 ~ 현재')
61
+ expect(periodLabelOf({ startedOn: '2020-01', endedOn: '2023-12' }, '현재')).toBe('2020.01 ~ 2023.12')
62
+ expect(periodLabelOf({ name: 'x', acquiredOn: '2010-05-01' }, '현재')).toBe('2010.05.01')
63
+ expect(periodLabelOf({ startedOn: '', endedOn: '' }, '현재')).toBe('')
64
+ })
65
+
66
+ it('★ complete when the summary, skills, education and projects are written - jobs and certificates are not asked', () => {
67
+ const empty = profileFormOf(null)
68
+ expect(completenessOf(empty)).toEqual({ percent: 0, missing: ['summary', 'skills', 'educations', 'projects'] })
69
+ expect(completenessOf({ ...empty, summary: ' ', skills: ['A'] })).toEqual({ percent: 25, missing: ['summary', 'educations', 'projects'] })
70
+ expect(completenessOf({ ...empty, summary: 'S', skills: ['A'], educations: [{}], projects: [{}] }).percent).toBe(100)
71
+ })
72
+ })
73
+
74
+ /** Who the profile list shows: everyone still working here, with or without a profile (ADR-0169 decision 4). */
75
+ describe('the active employees and their profiles', () => {
76
+ const today = '2026-10-27'
77
+
78
+ it('★ an employee marked inactive, or whose retire day has come, is not listed', () => {
79
+ expect(isActiveEmployee({ id: '1' }, today)).toBe(true)
80
+ expect(isActiveEmployee({ id: '1', active: true, retiredOn: null }, today)).toBe(true)
81
+ expect(isActiveEmployee({ id: '1', active: null }, today)).toBe(true)
82
+ expect(isActiveEmployee({ id: '1', active: false }, today)).toBe(false)
83
+ expect(isActiveEmployee({ id: '1', retiredOn: '2026-10-27' }, today)).toBe(false)
84
+ expect(isActiveEmployee({ id: '1', retiredOn: '2026-10-28' }, today)).toBe(true)
85
+ })
86
+
87
+ it('★ each active employee once, by name, with the profile written or none', () => {
88
+ const rows = employeesWithProfiles(
89
+ [
90
+ { id: 'b', name: '박지민', controlNo: '2', department: { name: '개발' }, jobPosition: '과장', hiredOn: '2020-01-01' },
91
+ { id: 'a', name: '김하늘', controlNo: '1', department: null },
92
+ { id: 'c', name: '최퇴사', retiredOn: '2025-01-01' }
93
+ ],
94
+ [{ employeeId: 'b', summary: 'S' }, { employeeId: 'c', summary: 'gone' }],
95
+ today
96
+ )
97
+ expect(rows.map(row => [row.name, row.departmentName, row.profile?.summary ?? null])).toEqual([
98
+ ['김하늘', undefined, null],
99
+ ['박지민', '개발', 'S']
100
+ ])
101
+ expect(rows[1]).toMatchObject({ employeeId: 'b', controlNo: '2', jobPosition: '과장', hiredOn: '2020-01-01' })
102
+ })
103
+ })
@@ -7,6 +7,9 @@ export default {
7
7
  { tagname: 'employee-list-page', page: 'employee-list' },
8
8
  { tagname: 'department-list-page', page: 'department-list' },
9
9
  { tagname: 'approval-line-list-page', page: 'approval-line-list' },
10
+ /* A person's own career profile, and every one of them to download for a quotation (ADR-0169). */
11
+ { tagname: 'my-employee-profile-page', page: 'my-employee-profile' },
12
+ { tagname: 'employee-profile-list-page', page: 'employee-profile-list' },
10
13
  { tagname: 'common-approval-line-templates-page', page: 'common-approval-line-templates-page' },
11
14
  { tagname: 'my-approval-line-templates-page', page: 'my-approval-line-templates-page' }
12
15
  ],
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "Keeping employees and departments",
106
106
  "task.organization.people-keeping.description": "Reads and changes employee and department records. Pay accounts are not among them.",
107
107
  "task.organization.pay-accounts.name": "Keeping employees' pay accounts",
108
- "task.organization.pay-accounts.description": "Reads and changes the account each employee is paid into - bank and number."
108
+ "task.organization.pay-accounts.description": "Reads and changes the account each employee is paid into - bank and number.",
109
+ "title.my-employee-profile": "my profile",
110
+ "title.employee-profile-list": "employee profiles",
111
+ "button.employee-profile-download": "download as Excel",
112
+ "label.employee-profile-summary": "summary",
113
+ "label.employee-profile-skills": "skills",
114
+ "label.employee-profile-educations": "education",
115
+ "label.employee-profile-certificates": "certificates",
116
+ "label.employee-profile-careers": "career",
117
+ "label.employee-profile-projects": "projects",
118
+ "label.employee-profile-school": "school",
119
+ "label.employee-profile-major": "major",
120
+ "label.employee-profile-degree": "degree",
121
+ "label.employee-profile-started-on": "from",
122
+ "label.employee-profile-ended-on": "to",
123
+ "label.employee-profile-period": "period",
124
+ "label.employee-profile-certificate": "certificate",
125
+ "label.employee-profile-issuer": "issued by",
126
+ "label.employee-profile-acquired-on": "acquired on",
127
+ "label.employee-profile-company": "company",
128
+ "label.employee-profile-position": "position",
129
+ "label.employee-profile-duties": "duties",
130
+ "label.employee-profile-project": "project",
131
+ "label.employee-profile-client": "client",
132
+ "label.employee-profile-role": "role",
133
+ "label.employee-profile-technologies": "technologies",
134
+ "label.employee-profile-updated-at": "profile updated",
135
+ "text.employee-profile-not-linked-title": "this account is not linked to an employee record",
136
+ "text.employee-profile-not-linked-description": "each employee writes their own profile. A $t(term.domain) administrator can link this account to an employee in the employee list.",
137
+ "text.employee-profile-select-rows-first": "select the employees to download first",
138
+ "text.employee-profile-file": "employee-profiles",
139
+ "text.employee-profile-empty": "no active employees",
140
+ "task.organization.own-profile.name": "My profile",
141
+ "task.organization.own-profile.description": "Reads and writes one's own profile - summary, skills, education, certificates, career and projects.",
142
+ "task.organization.profiles-reading.name": "Reading employee profiles",
143
+ "task.organization.profiles-reading.description": "Reads every active employee's profile and downloads them as Excel. Contact, address, accounts and pay are not among them.",
144
+ "text.employee-profile-doc-title": "Staff Profile",
145
+ "text.employee-profile-doc-roster": "Staff Roster",
146
+ "text.employee-profile-doc-ongoing": "present",
147
+ "text.employee-profile-doc-none": "None",
148
+ "text.employee-profile-doc-written-on": "Written on",
149
+ "text.employee-profile-doc-number": "No.",
150
+ "text.employee-profile-doc-years": "{years} yr {months} mo",
151
+ "label.employee-profile-career-length": "total experience",
152
+ "button.employee-profile-download-pdf": "download as PDF",
153
+ "text.employee-profile-completeness": "Profile completeness",
154
+ "text.employee-profile-to-fill": "To fill",
155
+ "text.employee-profile-ready": "Ready to attach to a quotation",
156
+ "text.employee-profile-unsaved": "There are unsaved changes",
157
+ "text.employee-profile-summary-example": "e.g. Ten years designing and building manufacturing MES - process modelling and equipment integration, PM for the last three.",
158
+ "text.employee-profile-skill-placeholder": "Type a skill and press Enter",
159
+ "text.employee-profile-why-educations": "Start from the latest degree.",
160
+ "text.employee-profile-why-certificates": "Certificates a bid looks at.",
161
+ "text.employee-profile-why-careers": "Jobs before this company - they add to the total experience.",
162
+ "text.employee-profile-why-projects": "The first thing read on a profile attached to a quotation - the role and what was done.",
163
+ "label.employee-profile-ongoing": "ongoing",
164
+ "text.employee-profile-new-entry": "New entry",
165
+ "text.employee-profile-doc-expertise": "Core Expertise",
166
+ "text.employee-profile-doc-projects-done": "Projects delivered",
167
+ "text.employee-profile-doc-certificates-held": "Certifications",
168
+ "text.employee-profile-doc-project-count": "{n}",
169
+ "text.employee-profile-doc-certificate-count": "{n}",
170
+ "text.employee-profile-doc-people": "{n} people",
171
+ "text.employee-profile-doc-average-career": "Average experience",
172
+ "label.employee-profile-document-language": "document language",
173
+ "button.employee-profile-preview": "preview",
174
+ "title.employee-profile-preview": "staff profile preview",
175
+ "label.organization-entry-employee-profile": "my profile",
176
+ "label.organization-entry-profile-section": "part",
177
+ "label.organization-entry-profile-text": "text",
178
+ "label.organization-entry-profile-name": "name",
179
+ "text.organization-entry-profile-section-summary": "summary",
180
+ "text.organization-entry-profile-section-skill": "skill",
181
+ "text.organization-entry-profile-section-education": "education",
182
+ "text.organization-entry-profile-section-certificate": "certificate",
183
+ "text.organization-entry-profile-section-career": "career",
184
+ "text.organization-entry-profile-section-project": "project",
185
+ "text.organization-entry-profile-one-summary": "A profile has one summary"
109
186
  }
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "Mantener empleados y departamentos",
106
106
  "task.organization.people-keeping.description": "Lee y modifica los registros de empleados y departamentos. Las cuentas de nómina no se incluyen.",
107
107
  "task.organization.pay-accounts.name": "Cuentas de nómina de los empleados",
108
- "task.organization.pay-accounts.description": "Lee y modifica la cuenta en la que cobra cada empleado: banco y número."
108
+ "task.organization.pay-accounts.description": "Lee y modifica la cuenta en la que cobra cada empleado: banco y número.",
109
+ "title.my-employee-profile": "mi perfil",
110
+ "title.employee-profile-list": "perfiles de empleados",
111
+ "button.employee-profile-download": "descargar en Excel",
112
+ "label.employee-profile-summary": "resumen",
113
+ "label.employee-profile-skills": "habilidades",
114
+ "label.employee-profile-educations": "formación",
115
+ "label.employee-profile-certificates": "certificaciones",
116
+ "label.employee-profile-careers": "experiencia",
117
+ "label.employee-profile-projects": "proyectos",
118
+ "label.employee-profile-school": "centro",
119
+ "label.employee-profile-major": "especialidad",
120
+ "label.employee-profile-degree": "título",
121
+ "label.employee-profile-started-on": "desde",
122
+ "label.employee-profile-ended-on": "hasta",
123
+ "label.employee-profile-period": "periodo",
124
+ "label.employee-profile-certificate": "certificación",
125
+ "label.employee-profile-issuer": "emitida por",
126
+ "label.employee-profile-acquired-on": "obtenida el",
127
+ "label.employee-profile-company": "empresa",
128
+ "label.employee-profile-position": "puesto",
129
+ "label.employee-profile-duties": "funciones",
130
+ "label.employee-profile-project": "proyecto",
131
+ "label.employee-profile-client": "cliente",
132
+ "label.employee-profile-role": "rol",
133
+ "label.employee-profile-technologies": "tecnologías",
134
+ "label.employee-profile-updated-at": "perfil actualizado",
135
+ "text.employee-profile-not-linked-title": "esta cuenta no está vinculada a un registro de empleado",
136
+ "text.employee-profile-not-linked-description": "cada empleado escribe su propio perfil. Un administrador de $t(term.domain) puede vincular esta cuenta a un empleado en la lista de empleados.",
137
+ "text.employee-profile-select-rows-first": "seleccione primero los empleados que desea descargar",
138
+ "text.employee-profile-file": "perfiles-empleados",
139
+ "text.employee-profile-empty": "no hay empleados en activo",
140
+ "task.organization.own-profile.name": "Mi perfil",
141
+ "task.organization.own-profile.description": "Lee y escribe el propio perfil: resumen, habilidades, formación, certificaciones, experiencia y proyectos.",
142
+ "task.organization.profiles-reading.name": "Lectura de perfiles de empleados",
143
+ "task.organization.profiles-reading.description": "Lee el perfil de cada empleado en activo y los descarga en Excel. No incluye contacto, dirección, cuentas ni nómina.",
144
+ "text.employee-profile-doc-title": "Perfil profesional",
145
+ "text.employee-profile-doc-roster": "Relación de personal",
146
+ "text.employee-profile-doc-ongoing": "actualidad",
147
+ "text.employee-profile-doc-none": "Ninguno",
148
+ "text.employee-profile-doc-written-on": "Fecha",
149
+ "text.employee-profile-doc-number": "N.º",
150
+ "text.employee-profile-doc-years": "{years} años {months} meses",
151
+ "label.employee-profile-career-length": "experiencia total",
152
+ "button.employee-profile-download-pdf": "descargar PDF",
153
+ "text.employee-profile-completeness": "Perfil completado",
154
+ "text.employee-profile-to-fill": "Por completar",
155
+ "text.employee-profile-ready": "Listo para adjuntar a una oferta",
156
+ "text.employee-profile-unsaved": "Hay cambios sin guardar",
157
+ "text.employee-profile-summary-example": "p. ej. Diez años diseñando e implantando MES de fabricación; modelado de procesos e integración de equipos, PM los últimos tres.",
158
+ "text.employee-profile-skill-placeholder": "Escriba una habilidad y pulse Intro",
159
+ "text.employee-profile-why-educations": "Empiece por la titulación más reciente.",
160
+ "text.employee-profile-why-certificates": "Las certificaciones que mira una licitación.",
161
+ "text.employee-profile-why-careers": "Empleos anteriores a esta empresa; suman a la experiencia total.",
162
+ "text.employee-profile-why-projects": "Lo primero que se lee en un perfil adjunto a una oferta: el rol y lo que se hizo.",
163
+ "label.employee-profile-ongoing": "en curso",
164
+ "text.employee-profile-new-entry": "Nueva entrada",
165
+ "text.employee-profile-doc-expertise": "Competencias clave",
166
+ "text.employee-profile-doc-projects-done": "Proyectos realizados",
167
+ "text.employee-profile-doc-certificates-held": "Certificaciones",
168
+ "text.employee-profile-doc-project-count": "{n}",
169
+ "text.employee-profile-doc-certificate-count": "{n}",
170
+ "text.employee-profile-doc-people": "{n} personas",
171
+ "text.employee-profile-doc-average-career": "Experiencia media",
172
+ "label.employee-profile-document-language": "idioma del documento",
173
+ "button.employee-profile-preview": "vista previa",
174
+ "title.employee-profile-preview": "vista previa del perfil",
175
+ "label.organization-entry-employee-profile": "mi perfil",
176
+ "label.organization-entry-profile-section": "parte",
177
+ "label.organization-entry-profile-text": "texto",
178
+ "label.organization-entry-profile-name": "nombre",
179
+ "text.organization-entry-profile-section-summary": "resumen",
180
+ "text.organization-entry-profile-section-skill": "habilidad",
181
+ "text.organization-entry-profile-section-education": "formación",
182
+ "text.organization-entry-profile-section-certificate": "certificación",
183
+ "text.organization-entry-profile-section-career": "experiencia",
184
+ "text.organization-entry-profile-section-project": "proyecto",
185
+ "text.organization-entry-profile-one-summary": "Un perfil tiene un solo resumen"
109
186
  }
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "社員・部署の管理",
106
106
  "task.organization.people-keeping.description": "社員と部署の記録を読み、変更する。給与口座は含まない。",
107
107
  "task.organization.pay-accounts.name": "社員の給与口座",
108
- "task.organization.pay-accounts.description": "社員が給与を受け取る口座(銀行・番号)を読み、変更する。"
108
+ "task.organization.pay-accounts.description": "社員が給与を受け取る口座(銀行・番号)を読み、変更する。",
109
+ "title.my-employee-profile": "自分のプロフィール",
110
+ "title.employee-profile-list": "人材プロフィール",
111
+ "button.employee-profile-download": "Excelでダウンロード",
112
+ "label.employee-profile-summary": "概要",
113
+ "label.employee-profile-skills": "保有スキル",
114
+ "label.employee-profile-educations": "学歴",
115
+ "label.employee-profile-certificates": "資格",
116
+ "label.employee-profile-careers": "職歴",
117
+ "label.employee-profile-projects": "プロジェクト履歴",
118
+ "label.employee-profile-school": "学校",
119
+ "label.employee-profile-major": "専攻",
120
+ "label.employee-profile-degree": "学位",
121
+ "label.employee-profile-started-on": "開始",
122
+ "label.employee-profile-ended-on": "終了",
123
+ "label.employee-profile-period": "期間",
124
+ "label.employee-profile-certificate": "資格名",
125
+ "label.employee-profile-issuer": "発行機関",
126
+ "label.employee-profile-acquired-on": "取得日",
127
+ "label.employee-profile-company": "会社",
128
+ "label.employee-profile-position": "役職",
129
+ "label.employee-profile-duties": "業務",
130
+ "label.employee-profile-project": "プロジェクト",
131
+ "label.employee-profile-client": "発注元",
132
+ "label.employee-profile-role": "役割",
133
+ "label.employee-profile-technologies": "使用技術",
134
+ "label.employee-profile-updated-at": "プロフィール更新日",
135
+ "text.employee-profile-not-linked-title": "社員記録と連携していないアカウントです",
136
+ "text.employee-profile-not-linked-description": "プロフィールは社員本人が書きます。$t(term.domain)管理者が社員一覧でこのアカウントを社員と連携できます。",
137
+ "text.employee-profile-select-rows-first": "ダウンロードする社員を先に選んでください",
138
+ "text.employee-profile-file": "人材プロフィール",
139
+ "text.employee-profile-empty": "在職中の社員がいません",
140
+ "task.organization.own-profile.name": "自分のプロフィール",
141
+ "task.organization.own-profile.description": "自分のプロフィール(概要・保有スキル・学歴・資格・職歴・プロジェクト履歴)を読み書きする。",
142
+ "task.organization.profiles-reading.name": "人材プロフィールの閲覧",
143
+ "task.organization.profiles-reading.description": "在職中の全社員のプロフィールを読み、Excelでダウンロードする。連絡先・住所・口座・給与は含まない。",
144
+ "text.employee-profile-doc-title": "人材プロフィール",
145
+ "text.employee-profile-doc-roster": "人材一覧",
146
+ "text.employee-profile-doc-ongoing": "現在",
147
+ "text.employee-profile-doc-none": "該当なし",
148
+ "text.employee-profile-doc-written-on": "作成日",
149
+ "text.employee-profile-doc-number": "番号",
150
+ "text.employee-profile-doc-years": "{years}年{months}ヶ月",
151
+ "label.employee-profile-career-length": "総経歴",
152
+ "button.employee-profile-download-pdf": "PDFでダウンロード",
153
+ "text.employee-profile-completeness": "プロフィール完成度",
154
+ "text.employee-profile-to-fill": "未入力",
155
+ "text.employee-profile-ready": "見積に添付する準備ができました",
156
+ "text.employee-profile-unsaved": "保存していない変更があります",
157
+ "text.employee-profile-summary-example": "例: 製造MESの設計・構築10年。工程モデリングと設備連携を主に担当し、直近3年はPMとして従事。",
158
+ "text.employee-profile-skill-placeholder": "スキルを入力してEnter",
159
+ "text.employee-profile-why-educations": "最終学歴から記入します。",
160
+ "text.employee-profile-why-certificates": "入札で見られる資格を記入します。",
161
+ "text.employee-profile-why-careers": "現在の会社に入る前の経歴です。総経歴に加算されます。",
162
+ "text.employee-profile-why-projects": "見積に添付するプロフィールで最初に読まれる箇所です。担当した役割と内容を記入します。",
163
+ "label.employee-profile-ongoing": "進行中",
164
+ "text.employee-profile-new-entry": "新しい項目",
165
+ "text.employee-profile-doc-expertise": "コア・コンピテンシー",
166
+ "text.employee-profile-doc-projects-done": "遂行プロジェクト",
167
+ "text.employee-profile-doc-certificates-held": "保有資格",
168
+ "text.employee-profile-doc-project-count": "{n}件",
169
+ "text.employee-profile-doc-certificate-count": "{n}件",
170
+ "text.employee-profile-doc-people": "{n}名",
171
+ "text.employee-profile-doc-average-career": "平均経歴",
172
+ "label.employee-profile-document-language": "文書の言語",
173
+ "button.employee-profile-preview": "プレビュー",
174
+ "title.employee-profile-preview": "人材プロフィールのプレビュー",
175
+ "label.organization-entry-employee-profile": "マイプロフィール",
176
+ "label.organization-entry-profile-section": "区分",
177
+ "label.organization-entry-profile-text": "内容",
178
+ "label.organization-entry-profile-name": "名称",
179
+ "text.organization-entry-profile-section-summary": "概要",
180
+ "text.organization-entry-profile-section-skill": "スキル",
181
+ "text.organization-entry-profile-section-education": "学歴",
182
+ "text.organization-entry-profile-section-certificate": "資格",
183
+ "text.organization-entry-profile-section-career": "経歴",
184
+ "text.organization-entry-profile-section-project": "プロジェクト",
185
+ "text.organization-entry-profile-one-summary": "概要は一つだけです"
109
186
  }
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "직원·부서 관리",
106
106
  "task.organization.people-keeping.description": "직원과 부서 기록을 읽고 바꾼다. 급여 계좌는 빠진다.",
107
107
  "task.organization.pay-accounts.name": "직원 급여 계좌",
108
- "task.organization.pay-accounts.description": "직원이 급여를 받는 계좌(은행·번호)를 읽고 바꾼다."
108
+ "task.organization.pay-accounts.description": "직원이 급여를 받는 계좌(은행·번호)를 읽고 바꾼다.",
109
+ "title.my-employee-profile": "내 프로필",
110
+ "title.employee-profile-list": "인력 프로필",
111
+ "button.employee-profile-download": "엑셀로 내려받기",
112
+ "label.employee-profile-summary": "요약",
113
+ "label.employee-profile-skills": "보유 기술",
114
+ "label.employee-profile-educations": "학력",
115
+ "label.employee-profile-certificates": "자격",
116
+ "label.employee-profile-careers": "경력",
117
+ "label.employee-profile-projects": "프로젝트 이력",
118
+ "label.employee-profile-school": "학교",
119
+ "label.employee-profile-major": "전공",
120
+ "label.employee-profile-degree": "학위",
121
+ "label.employee-profile-started-on": "시작",
122
+ "label.employee-profile-ended-on": "끝",
123
+ "label.employee-profile-period": "기간",
124
+ "label.employee-profile-certificate": "자격명",
125
+ "label.employee-profile-issuer": "발급 기관",
126
+ "label.employee-profile-acquired-on": "취득일",
127
+ "label.employee-profile-company": "회사",
128
+ "label.employee-profile-position": "직위",
129
+ "label.employee-profile-duties": "업무",
130
+ "label.employee-profile-project": "프로젝트",
131
+ "label.employee-profile-client": "발주처",
132
+ "label.employee-profile-role": "역할",
133
+ "label.employee-profile-technologies": "사용 기술",
134
+ "label.employee-profile-updated-at": "프로필 갱신일",
135
+ "text.employee-profile-not-linked-title": "직원 기록과 이어지지 않은 계정입니다",
136
+ "text.employee-profile-not-linked-description": "프로필은 직원이 자기 것을 씁니다. $t(term.domain) 관리자가 직원 목록에서 이 계정을 직원과 이어 줄 수 있습니다.",
137
+ "text.employee-profile-select-rows-first": "내려받을 직원을 먼저 고르십시오",
138
+ "text.employee-profile-file": "인력프로필",
139
+ "text.employee-profile-empty": "재직 중인 직원이 없습니다",
140
+ "task.organization.own-profile.name": "내 프로필",
141
+ "task.organization.own-profile.description": "자기 프로필(요약 · 보유 기술 · 학력 · 자격 · 경력 · 프로젝트 이력)을 읽고 쓴다.",
142
+ "task.organization.profiles-reading.name": "인력 프로필 열람",
143
+ "task.organization.profiles-reading.description": "재직 중인 모든 직원의 프로필을 읽고 엑셀로 내려받는다. 연락처 · 주소 · 계좌 · 급여는 빠진다.",
144
+ "text.employee-profile-doc-title": "인력 프로필",
145
+ "text.employee-profile-doc-roster": "인력 현황",
146
+ "text.employee-profile-doc-ongoing": "현재",
147
+ "text.employee-profile-doc-none": "해당 없음",
148
+ "text.employee-profile-doc-written-on": "작성일",
149
+ "text.employee-profile-doc-number": "번호",
150
+ "text.employee-profile-doc-years": "{years}년 {months}개월",
151
+ "label.employee-profile-career-length": "총 경력",
152
+ "button.employee-profile-download-pdf": "PDF로 내려받기",
153
+ "text.employee-profile-completeness": "프로필 완성도",
154
+ "text.employee-profile-to-fill": "채울 곳",
155
+ "text.employee-profile-ready": "견적에 붙일 준비가 됐습니다",
156
+ "text.employee-profile-unsaved": "저장하지 않은 변경이 있습니다",
157
+ "text.employee-profile-summary-example": "예: 제조 MES 설계·구축 10년. 공정 모델링과 설비 연동을 주로 맡았고, 최근 3년은 PM으로 일했습니다.",
158
+ "text.employee-profile-skill-placeholder": "기술을 적고 Enter",
159
+ "text.employee-profile-why-educations": "최종 학력부터 적습니다.",
160
+ "text.employee-profile-why-certificates": "정보처리기사처럼 입찰에서 보는 자격을 적습니다.",
161
+ "text.employee-profile-why-careers": "지금 회사에 오기 전의 경력입니다. 총 경력에 더해집니다.",
162
+ "text.employee-profile-why-projects": "견적에 붙는 프로필에서 가장 먼저 읽히는 곳입니다. 맡은 역할과 한 일을 적습니다.",
163
+ "label.employee-profile-ongoing": "진행 중",
164
+ "text.employee-profile-new-entry": "새 항목",
165
+ "text.employee-profile-doc-expertise": "핵심 역량",
166
+ "text.employee-profile-doc-projects-done": "수행 프로젝트",
167
+ "text.employee-profile-doc-certificates-held": "보유 자격",
168
+ "text.employee-profile-doc-project-count": "{n}건",
169
+ "text.employee-profile-doc-certificate-count": "{n}개",
170
+ "text.employee-profile-doc-people": "{n}명",
171
+ "text.employee-profile-doc-average-career": "평균 경력",
172
+ "label.employee-profile-document-language": "문서 언어",
173
+ "button.employee-profile-preview": "미리 보기",
174
+ "title.employee-profile-preview": "인력 프로필 미리 보기",
175
+ "label.organization-entry-employee-profile": "내 프로필",
176
+ "label.organization-entry-profile-section": "구분",
177
+ "label.organization-entry-profile-text": "내용",
178
+ "label.organization-entry-profile-name": "이름",
179
+ "text.organization-entry-profile-section-summary": "요약",
180
+ "text.organization-entry-profile-section-skill": "보유 기술",
181
+ "text.organization-entry-profile-section-education": "학력",
182
+ "text.organization-entry-profile-section-certificate": "자격",
183
+ "text.organization-entry-profile-section-career": "경력",
184
+ "text.organization-entry-profile-section-project": "프로젝트",
185
+ "text.organization-entry-profile-one-summary": "요약은 하나만 들어갑니다"
109
186
  }
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "Menyelenggara pekerja dan jabatan",
106
106
  "task.organization.people-keeping.description": "Membaca dan mengubah rekod pekerja dan jabatan. Akaun gaji tidak termasuk.",
107
107
  "task.organization.pay-accounts.name": "Akaun gaji pekerja",
108
- "task.organization.pay-accounts.description": "Membaca dan mengubah akaun gaji setiap pekerja: bank dan nombor."
108
+ "task.organization.pay-accounts.description": "Membaca dan mengubah akaun gaji setiap pekerja: bank dan nombor.",
109
+ "title.my-employee-profile": "profil saya",
110
+ "title.employee-profile-list": "profil pekerja",
111
+ "button.employee-profile-download": "muat turun sebagai Excel",
112
+ "label.employee-profile-summary": "ringkasan",
113
+ "label.employee-profile-skills": "kemahiran",
114
+ "label.employee-profile-educations": "pendidikan",
115
+ "label.employee-profile-certificates": "sijil",
116
+ "label.employee-profile-careers": "kerjaya",
117
+ "label.employee-profile-projects": "projek",
118
+ "label.employee-profile-school": "sekolah",
119
+ "label.employee-profile-major": "bidang",
120
+ "label.employee-profile-degree": "ijazah",
121
+ "label.employee-profile-started-on": "dari",
122
+ "label.employee-profile-ended-on": "hingga",
123
+ "label.employee-profile-period": "tempoh",
124
+ "label.employee-profile-certificate": "sijil",
125
+ "label.employee-profile-issuer": "dikeluarkan oleh",
126
+ "label.employee-profile-acquired-on": "diperoleh pada",
127
+ "label.employee-profile-company": "syarikat",
128
+ "label.employee-profile-position": "jawatan",
129
+ "label.employee-profile-duties": "tugas",
130
+ "label.employee-profile-project": "projek",
131
+ "label.employee-profile-client": "pelanggan",
132
+ "label.employee-profile-role": "peranan",
133
+ "label.employee-profile-technologies": "teknologi",
134
+ "label.employee-profile-updated-at": "profil dikemas kini",
135
+ "text.employee-profile-not-linked-title": "akaun ini tidak dipautkan kepada rekod pekerja",
136
+ "text.employee-profile-not-linked-description": "setiap pekerja menulis profil sendiri. Pentadbir $t(term.domain) boleh memautkan akaun ini kepada pekerja dalam senarai pekerja.",
137
+ "text.employee-profile-select-rows-first": "pilih pekerja yang hendak dimuat turun dahulu",
138
+ "text.employee-profile-file": "profil-pekerja",
139
+ "text.employee-profile-empty": "tiada pekerja aktif",
140
+ "task.organization.own-profile.name": "Profil saya",
141
+ "task.organization.own-profile.description": "Membaca dan menulis profil sendiri: ringkasan, kemahiran, pendidikan, sijil, kerjaya dan projek.",
142
+ "task.organization.profiles-reading.name": "Membaca profil pekerja",
143
+ "task.organization.profiles-reading.description": "Membaca profil setiap pekerja aktif dan memuat turunnya sebagai Excel. Hubungan, alamat, akaun dan gaji tidak termasuk.",
144
+ "text.employee-profile-doc-title": "Profil Kakitangan",
145
+ "text.employee-profile-doc-roster": "Senarai Kakitangan",
146
+ "text.employee-profile-doc-ongoing": "kini",
147
+ "text.employee-profile-doc-none": "Tiada",
148
+ "text.employee-profile-doc-written-on": "Tarikh",
149
+ "text.employee-profile-doc-number": "Bil.",
150
+ "text.employee-profile-doc-years": "{years} thn {months} bln",
151
+ "label.employee-profile-career-length": "jumlah pengalaman",
152
+ "button.employee-profile-download-pdf": "muat turun PDF",
153
+ "text.employee-profile-completeness": "Kelengkapan profil",
154
+ "text.employee-profile-to-fill": "Untuk diisi",
155
+ "text.employee-profile-ready": "Sedia dilampirkan pada sebut harga",
156
+ "text.employee-profile-unsaved": "Ada perubahan yang belum disimpan",
157
+ "text.employee-profile-summary-example": "cth. Sepuluh tahun mereka bentuk dan membina MES pembuatan; pemodelan proses dan integrasi peralatan, PM tiga tahun kebelakangan.",
158
+ "text.employee-profile-skill-placeholder": "Taip kemahiran dan tekan Enter",
159
+ "text.employee-profile-why-educations": "Mulakan dengan kelulusan terkini.",
160
+ "text.employee-profile-why-certificates": "Sijil yang dilihat dalam tender.",
161
+ "text.employee-profile-why-careers": "Pekerjaan sebelum syarikat ini - dikira dalam jumlah pengalaman.",
162
+ "text.employee-profile-why-projects": "Bahagian pertama yang dibaca pada profil yang dilampirkan - peranan dan kerja yang dibuat.",
163
+ "label.employee-profile-ongoing": "sedang berjalan",
164
+ "text.employee-profile-new-entry": "Entri baharu",
165
+ "text.employee-profile-doc-expertise": "Kepakaran Teras",
166
+ "text.employee-profile-doc-projects-done": "Projek disiapkan",
167
+ "text.employee-profile-doc-certificates-held": "Pensijilan",
168
+ "text.employee-profile-doc-project-count": "{n}",
169
+ "text.employee-profile-doc-certificate-count": "{n}",
170
+ "text.employee-profile-doc-people": "{n} orang",
171
+ "text.employee-profile-doc-average-career": "Purata pengalaman",
172
+ "label.employee-profile-document-language": "bahasa dokumen",
173
+ "button.employee-profile-preview": "pratonton",
174
+ "title.employee-profile-preview": "pratonton profil kakitangan",
175
+ "label.organization-entry-employee-profile": "profil saya",
176
+ "label.organization-entry-profile-section": "bahagian",
177
+ "label.organization-entry-profile-text": "teks",
178
+ "label.organization-entry-profile-name": "nama",
179
+ "text.organization-entry-profile-section-summary": "ringkasan",
180
+ "text.organization-entry-profile-section-skill": "kemahiran",
181
+ "text.organization-entry-profile-section-education": "pendidikan",
182
+ "text.organization-entry-profile-section-certificate": "pensijilan",
183
+ "text.organization-entry-profile-section-career": "kerjaya",
184
+ "text.organization-entry-profile-section-project": "projek",
185
+ "text.organization-entry-profile-one-summary": "Profil hanya ada satu ringkasan"
109
186
  }
@@ -105,5 +105,82 @@
105
105
  "task.organization.people-keeping.name": "管理员工与部门",
106
106
  "task.organization.people-keeping.description": "读取并修改员工和部门记录。不含工资账户。",
107
107
  "task.organization.pay-accounts.name": "员工工资账户",
108
- "task.organization.pay-accounts.description": "读取并修改员工领取工资的账户(银行、账号)。"
108
+ "task.organization.pay-accounts.description": "读取并修改员工领取工资的账户(银行、账号)。",
109
+ "title.my-employee-profile": "我的简历",
110
+ "title.employee-profile-list": "人员简历",
111
+ "button.employee-profile-download": "下载为 Excel",
112
+ "label.employee-profile-summary": "简介",
113
+ "label.employee-profile-skills": "掌握技能",
114
+ "label.employee-profile-educations": "学历",
115
+ "label.employee-profile-certificates": "资格证书",
116
+ "label.employee-profile-careers": "工作经历",
117
+ "label.employee-profile-projects": "项目经历",
118
+ "label.employee-profile-school": "学校",
119
+ "label.employee-profile-major": "专业",
120
+ "label.employee-profile-degree": "学位",
121
+ "label.employee-profile-started-on": "开始",
122
+ "label.employee-profile-ended-on": "结束",
123
+ "label.employee-profile-period": "期间",
124
+ "label.employee-profile-certificate": "证书名称",
125
+ "label.employee-profile-issuer": "发证机构",
126
+ "label.employee-profile-acquired-on": "取得日期",
127
+ "label.employee-profile-company": "公司",
128
+ "label.employee-profile-position": "职位",
129
+ "label.employee-profile-duties": "工作内容",
130
+ "label.employee-profile-project": "项目",
131
+ "label.employee-profile-client": "发包方",
132
+ "label.employee-profile-role": "角色",
133
+ "label.employee-profile-technologies": "使用技术",
134
+ "label.employee-profile-updated-at": "简历更新日期",
135
+ "text.employee-profile-not-linked-title": "此账户未与员工记录关联",
136
+ "text.employee-profile-not-linked-description": "简历由员工本人填写。$t(term.domain)管理员可以在员工列表中将此账户与员工关联。",
137
+ "text.employee-profile-select-rows-first": "请先选择要下载的员工",
138
+ "text.employee-profile-file": "人员简历",
139
+ "text.employee-profile-empty": "没有在职员工",
140
+ "task.organization.own-profile.name": "我的简历",
141
+ "task.organization.own-profile.description": "读取并填写自己的简历(简介、掌握技能、学历、资格证书、工作经历、项目经历)。",
142
+ "task.organization.profiles-reading.name": "查看人员简历",
143
+ "task.organization.profiles-reading.description": "读取所有在职员工的简历并下载为 Excel。不含联系方式、地址、账户和工资。",
144
+ "text.employee-profile-doc-title": "人员简历",
145
+ "text.employee-profile-doc-roster": "人员一览",
146
+ "text.employee-profile-doc-ongoing": "至今",
147
+ "text.employee-profile-doc-none": "无",
148
+ "text.employee-profile-doc-written-on": "填写日期",
149
+ "text.employee-profile-doc-number": "序号",
150
+ "text.employee-profile-doc-years": "{years}年{months}个月",
151
+ "label.employee-profile-career-length": "总经历",
152
+ "button.employee-profile-download-pdf": "下载 PDF",
153
+ "text.employee-profile-completeness": "简历完成度",
154
+ "text.employee-profile-to-fill": "待填写",
155
+ "text.employee-profile-ready": "已可附在报价单上",
156
+ "text.employee-profile-unsaved": "有未保存的更改",
157
+ "text.employee-profile-summary-example": "例:制造 MES 设计与实施 10 年,主要负责工艺建模与设备集成,近 3 年担任 PM。",
158
+ "text.employee-profile-skill-placeholder": "输入技能后按 Enter",
159
+ "text.employee-profile-why-educations": "从最高学历开始填写。",
160
+ "text.employee-profile-why-certificates": "填写投标时会看的资格证书。",
161
+ "text.employee-profile-why-careers": "加入本公司之前的经历,计入总经历。",
162
+ "text.employee-profile-why-projects": "报价所附简历中最先被阅读的部分。填写担任的角色和所做的工作。",
163
+ "label.employee-profile-ongoing": "进行中",
164
+ "text.employee-profile-new-entry": "新条目",
165
+ "text.employee-profile-doc-expertise": "核心能力",
166
+ "text.employee-profile-doc-projects-done": "完成项目",
167
+ "text.employee-profile-doc-certificates-held": "持有资格",
168
+ "text.employee-profile-doc-project-count": "{n}个",
169
+ "text.employee-profile-doc-certificate-count": "{n}项",
170
+ "text.employee-profile-doc-people": "{n}人",
171
+ "text.employee-profile-doc-average-career": "平均经历",
172
+ "label.employee-profile-document-language": "文档语言",
173
+ "button.employee-profile-preview": "预览",
174
+ "title.employee-profile-preview": "人员简历预览",
175
+ "label.organization-entry-employee-profile": "我的简历",
176
+ "label.organization-entry-profile-section": "类别",
177
+ "label.organization-entry-profile-text": "内容",
178
+ "label.organization-entry-profile-name": "名称",
179
+ "text.organization-entry-profile-section-summary": "概要",
180
+ "text.organization-entry-profile-section-skill": "技能",
181
+ "text.organization-entry-profile-section-education": "学历",
182
+ "text.organization-entry-profile-section-certificate": "资格",
183
+ "text.organization-entry-profile-section-career": "经历",
184
+ "text.organization-entry-profile-section-project": "项目",
185
+ "text.organization-entry-profile-one-summary": "概要只有一条"
109
186
  }