Merge pull request #298 from Worklenz/feature/holiday-calendar-integration

feat(localization): update and enhance localization files for multipl…
This commit is contained in:
Chamika J
2025-07-28 10:01:33 +05:30
committed by GitHub
315 changed files with 9955 additions and 6115 deletions

View File

@@ -7,7 +7,9 @@
"Bash(npm run:*)", "Bash(npm run:*)",
"Bash(mkdir:*)", "Bash(mkdir:*)",
"Bash(cp:*)", "Bash(cp:*)",
"Bash(ls:*)" "Bash(ls:*)",
"WebFetch(domain:www.npmjs.com)",
"WebFetch(domain:github.com)"
], ],
"deny": [] "deny": []
} }

View File

@@ -349,7 +349,7 @@ export default class HolidayController extends WorklenzControllerBase {
} }
} }
} catch (error: any) { } catch (error: any) {
errors.push(`${country.name}: ${error.message}`); errors.push(`${country.name}: ${error?.message || "Unknown error"}`);
} }
} }

View File

@@ -5,7 +5,7 @@
<link rel="icon" href="./favicon.ico" /> <link rel="icon" href="./favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#2b2b2b" /> <meta name="theme-color" content="#2b2b2b" />
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="application-name" content="Worklenz" /> <meta name="application-name" content="Worklenz" />
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
@@ -17,27 +17,45 @@
<meta name="msapplication-config" content="/browserconfig.xml" /> <meta name="msapplication-config" content="/browserconfig.xml" />
<meta name="msapplication-TileColor" content="#2b2b2b" /> <meta name="msapplication-TileColor" content="#2b2b2b" />
<meta name="msapplication-tap-highlight" content="no" /> <meta name="msapplication-tap-highlight" content="no" />
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/favicon.ico" /> <link rel="apple-touch-icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="152x152" href="/favicon.ico" /> <link rel="apple-touch-icon" sizes="152x152" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.ico" /> <link rel="apple-touch-icon" sizes="180x180" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="167x167" href="/favicon.ico" /> <link rel="apple-touch-icon" sizes="167x167" href="/favicon.ico" />
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json" /> <link rel="manifest" href="/manifest.json" />
<!-- Resource hints for better loading performance --> <!-- Resource hints for better loading performance -->
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="dns-prefetch" href="https://www.googletagmanager.com" /> <link rel="dns-prefetch" href="https://www.googletagmanager.com" />
<link rel="dns-prefetch" href="https://js.hs-scripts.com" /> <link rel="dns-prefetch" href="https://js.hs-scripts.com" />
<!-- Preload critical resources --> <!-- Preload critical resources -->
<link rel="preload" href="/locales/en/common.json" as="fetch" type="application/json" crossorigin /> <link
<link rel="preload" href="/locales/en/auth/login.json" as="fetch" type="application/json" crossorigin /> rel="preload"
<link rel="preload" href="/locales/en/navbar.json" as="fetch" type="application/json" crossorigin /> href="/locales/en/common.json"
as="fetch"
type="application/json"
crossorigin
/>
<link
rel="preload"
href="/locales/en/auth/login.json"
as="fetch"
type="application/json"
crossorigin
/>
<link
rel="preload"
href="/locales/en/navbar.json"
as="fetch"
type="application/json"
crossorigin
/>
<!-- Optimized font loading with font-display: swap --> <!-- Optimized font loading with font-display: swap -->
<link <link
href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap" href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap"
@@ -51,12 +69,12 @@
rel="stylesheet" rel="stylesheet"
/> />
</noscript> </noscript>
<title>Worklenz</title> <title>Worklenz</title>
<!-- Environment configuration --> <!-- Environment configuration -->
<script src="/env-config.js"></script> <script src="/env-config.js"></script>
<!-- Analytics Module --> <!-- Analytics Module -->
<script src="/js/analytics.js"></script> <script src="/js/analytics.js"></script>
</head> </head>

View File

@@ -66,7 +66,7 @@ class AnalyticsManager {
// Add event listener to button // Add event listener to button
const btn = notice.querySelector('#analytics-notice-btn'); const btn = notice.querySelector('#analytics-notice-btn');
btn.addEventListener('click', (e) => { btn.addEventListener('click', e => {
e.preventDefault(); e.preventDefault();
localStorage.setItem('privacyNoticeShown', 'true'); localStorage.setItem('privacyNoticeShown', 'true');
notice.remove(); notice.remove();
@@ -77,7 +77,7 @@ class AnalyticsManager {
* Check if privacy notice should be shown * Check if privacy notice should be shown
*/ */
checkPrivacyNotice() { checkPrivacyNotice() {
const isProduction = const isProduction =
window.location.hostname === 'worklenz.com' || window.location.hostname === 'worklenz.com' ||
window.location.hostname === 'app.worklenz.com'; window.location.hostname === 'app.worklenz.com';
const noticeShown = localStorage.getItem('privacyNoticeShown') === 'true'; const noticeShown = localStorage.getItem('privacyNoticeShown') === 'true';
@@ -94,4 +94,4 @@ document.addEventListener('DOMContentLoaded', () => {
const analytics = new AnalyticsManager(); const analytics = new AnalyticsManager();
analytics.init(); analytics.init();
analytics.checkPrivacyNotice(); analytics.checkPrivacyNotice();
}); });

View File

@@ -24,10 +24,10 @@ class HubSpotManager {
script.async = true; script.async = true;
script.defer = true; script.defer = true;
script.src = this.scriptSrc; script.src = this.scriptSrc;
// Configure dark mode after script loads // Configure dark mode after script loads
script.onload = () => this.setupDarkModeSupport(); script.onload = () => this.setupDarkModeSupport();
document.body.appendChild(script); document.body.appendChild(script);
}; };
@@ -45,26 +45,26 @@ class HubSpotManager {
setupDarkModeSupport() { setupDarkModeSupport() {
const applyTheme = () => { const applyTheme = () => {
const isDark = document.documentElement.classList.contains('dark'); const isDark = document.documentElement.classList.contains('dark');
// Remove existing theme styles // Remove existing theme styles
const existingStyle = document.getElementById(this.styleId); const existingStyle = document.getElementById(this.styleId);
if (existingStyle) { if (existingStyle) {
existingStyle.remove(); existingStyle.remove();
} }
if (isDark) { if (isDark) {
this.injectDarkModeCSS(); this.injectDarkModeCSS();
} }
}; };
// Apply initial theme after delay to ensure widget is loaded // Apply initial theme after delay to ensure widget is loaded
setTimeout(applyTheme, 1000); setTimeout(applyTheme, 1000);
// Watch for theme changes // Watch for theme changes
const observer = new MutationObserver(applyTheme); const observer = new MutationObserver(applyTheme);
observer.observe(document.documentElement, { observer.observe(document.documentElement, {
attributes: true, attributes: true,
attributeFilter: ['class'] attributeFilter: ['class'],
}); });
} }
@@ -121,7 +121,7 @@ class HubSpotManager {
cleanup() { cleanup() {
const script = document.getElementById(this.scriptId); const script = document.getElementById(this.scriptId);
const style = document.getElementById(this.styleId); const style = document.getElementById(this.styleId);
if (script) script.remove(); if (script) script.remove();
if (style) style.remove(); if (style) style.remove();
} }
@@ -131,7 +131,7 @@ class HubSpotManager {
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const hubspot = new HubSpotManager(); const hubspot = new HubSpotManager();
hubspot.init(); hubspot.init();
// Make available globally for potential cleanup // Make available globally for potential cleanup
window.HubSpotManager = hubspot; window.HubSpotManager = hubspot;
}); });

View File

@@ -14,4 +14,4 @@
"saveButton": "Ruaj", "saveButton": "Ruaj",
"saved": "Cilësimet u ruajtën me sukses", "saved": "Cilësimet u ruajtën me sukses",
"errorSaving": "Gabim gjatë ruajtjes së cilësimeve" "errorSaving": "Gabim gjatë ruajtjes së cilësimeve"
} }

View File

@@ -111,4 +111,4 @@
"totalActual": "Total actual cost including time-based cost + Fixed Costs.", "totalActual": "Total actual cost including time-based cost + Fixed Costs.",
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget." "variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
} }
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "Fikso si tab i parazgjedhur", "pinTab": "Fikso si tab i parazgjedhur",
"unpinTab": "Hiqe fiksimin e tab-it të parazgjedhur", "unpinTab": "Hiqe fiksimin e tab-it të parazgjedhur",
"finance": "Finance" "finance": "Finance"
} }

View File

@@ -49,4 +49,4 @@
"jobTitleCreateError": "Dështoi të krijohet titulli i punës", "jobTitleCreateError": "Dështoi të krijohet titulli i punës",
"createButton": "Krijo", "createButton": "Krijo",
"cancelButton": "Anulo" "cancelButton": "Anulo"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "Emri", "namePlaceholder": "Emri",
"nameRequired": "Ju lutem shkruani një Emër", "nameRequired": "Ju lutem shkruani një Emër",
"updateFailed": "Ndryshimi i emrit të ekipit dështoi!" "updateFailed": "Ndryshimi i emrit të ekipit dështoi!"
} }

View File

@@ -31,4 +31,4 @@
"intervalWeeks": "Intervali (javë)", "intervalWeeks": "Intervali (javë)",
"intervalMonths": "Intervali (muaj)", "intervalMonths": "Intervali (muaj)",
"saveChanges": "Ruaj ndryshimet" "saveChanges": "Ruaj ndryshimet"
} }

View File

@@ -87,7 +87,7 @@
"peopleField": "Fusha e njerëzve", "peopleField": "Fusha e njerëzve",
"noDate": "Asnjë datë", "noDate": "Asnjë datë",
"unsupportedField": "Lloj fushe i pambështetur", "unsupportedField": "Lloj fushe i pambështetur",
"modal": { "modal": {
"addFieldTitle": "Shto fushë", "addFieldTitle": "Shto fushë",
"editFieldTitle": "Redakto fushën", "editFieldTitle": "Redakto fushën",
@@ -108,7 +108,7 @@
"createErrorMessage": "Dështoi në krijimin e kolonës së personalizuar", "createErrorMessage": "Dështoi në krijimin e kolonës së personalizuar",
"updateErrorMessage": "Dështoi në përditësimin e kolonës së personalizuar" "updateErrorMessage": "Dështoi në përditësimin e kolonës së personalizuar"
}, },
"fieldTypes": { "fieldTypes": {
"people": "Njerëz", "people": "Njerëz",
"number": "Numër", "number": "Numër",

View File

@@ -14,4 +14,4 @@
"saveButton": "Speichern", "saveButton": "Speichern",
"saved": "Einstellungen erfolgreich gespeichert", "saved": "Einstellungen erfolgreich gespeichert",
"errorSaving": "Fehler beim Speichern der Einstellungen" "errorSaving": "Fehler beim Speichern der Einstellungen"
} }

View File

@@ -111,4 +111,4 @@
"totalActual": "Total actual cost including time-based cost + Fixed Costs.", "totalActual": "Total actual cost including time-based cost + Fixed Costs.",
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget." "variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
} }
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "Als Standard-Registerkarte festsetzen", "pinTab": "Als Standard-Registerkarte festsetzen",
"unpinTab": "Standard-Registerkarte lösen", "unpinTab": "Standard-Registerkarte lösen",
"finance": "Finance" "finance": "Finance"
} }

View File

@@ -49,4 +49,4 @@
"jobTitleCreateError": "Berufsbezeichnung konnte nicht erstellt werden", "jobTitleCreateError": "Berufsbezeichnung konnte nicht erstellt werden",
"createButton": "Erstellen", "createButton": "Erstellen",
"cancelButton": "Abbrechen" "cancelButton": "Abbrechen"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "Name", "namePlaceholder": "Name",
"nameRequired": "Bitte geben Sie einen Namen ein", "nameRequired": "Bitte geben Sie einen Namen ein",
"updateFailed": "Änderung des Team-Namens fehlgeschlagen!" "updateFailed": "Änderung des Team-Namens fehlgeschlagen!"
} }

View File

@@ -31,4 +31,4 @@
"intervalWeeks": "Intervall (Wochen)", "intervalWeeks": "Intervall (Wochen)",
"intervalMonths": "Intervall (Monate)", "intervalMonths": "Intervall (Monate)",
"saveChanges": "Änderungen speichern" "saveChanges": "Änderungen speichern"
} }

View File

@@ -87,7 +87,7 @@
"peopleField": "Personenfeld", "peopleField": "Personenfeld",
"noDate": "Kein Datum", "noDate": "Kein Datum",
"unsupportedField": "Nicht unterstützter Feldtyp", "unsupportedField": "Nicht unterstützter Feldtyp",
"modal": { "modal": {
"addFieldTitle": "Feld hinzufügen", "addFieldTitle": "Feld hinzufügen",
"editFieldTitle": "Feld bearbeiten", "editFieldTitle": "Feld bearbeiten",
@@ -108,7 +108,7 @@
"createErrorMessage": "Fehler beim Erstellen der benutzerdefinierten Spalte", "createErrorMessage": "Fehler beim Erstellen der benutzerdefinierten Spalte",
"updateErrorMessage": "Fehler beim Aktualisieren der benutzerdefinierten Spalte" "updateErrorMessage": "Fehler beim Aktualisieren der benutzerdefinierten Spalte"
}, },
"fieldTypes": { "fieldTypes": {
"people": "Personen", "people": "Personen",
"number": "Zahl", "number": "Zahl",

View File

@@ -14,4 +14,4 @@
"saveButton": "Save", "saveButton": "Save",
"saved": "Settings saved successfully", "saved": "Settings saved successfully",
"errorSaving": "Error saving settings" "errorSaving": "Error saving settings"
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "Pin as default tab", "pinTab": "Pin as default tab",
"unpinTab": "Unpin default tab", "unpinTab": "Unpin default tab",
"finance": "Finance" "finance": "Finance"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "Name", "namePlaceholder": "Name",
"nameRequired": "Please enter a Name", "nameRequired": "Please enter a Name",
"updateFailed": "Team name change failed!" "updateFailed": "Team name change failed!"
} }

View File

@@ -87,7 +87,7 @@
"peopleField": "People field", "peopleField": "People field",
"noDate": "No date", "noDate": "No date",
"unsupportedField": "Unsupported field type", "unsupportedField": "Unsupported field type",
"modal": { "modal": {
"addFieldTitle": "Add field", "addFieldTitle": "Add field",
"editFieldTitle": "Edit field", "editFieldTitle": "Edit field",
@@ -108,7 +108,7 @@
"createErrorMessage": "Failed to create custom column", "createErrorMessage": "Failed to create custom column",
"updateErrorMessage": "Failed to update custom column" "updateErrorMessage": "Failed to update custom column"
}, },
"fieldTypes": { "fieldTypes": {
"people": "People", "people": "People",
"number": "Number", "number": "Number",

View File

@@ -14,4 +14,4 @@
"saveButton": "Guardar", "saveButton": "Guardar",
"saved": "Configuración guardada exitosamente", "saved": "Configuración guardada exitosamente",
"errorSaving": "Error al guardar la configuración" "errorSaving": "Error al guardar la configuración"
} }

View File

@@ -111,4 +111,4 @@
"totalActual": "Total actual cost including time-based cost + Fixed Costs.", "totalActual": "Total actual cost including time-based cost + Fixed Costs.",
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget." "variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
} }
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "Fijar como pestaña predeterminada", "pinTab": "Fijar como pestaña predeterminada",
"unpinTab": "Desfijar pestaña predeterminada", "unpinTab": "Desfijar pestaña predeterminada",
"finance": "Finance" "finance": "Finance"
} }

View File

@@ -49,4 +49,4 @@
"jobTitleCreateError": "No se pudo crear el título de trabajo", "jobTitleCreateError": "No se pudo crear el título de trabajo",
"createButton": "Crear", "createButton": "Crear",
"cancelButton": "Cancelar" "cancelButton": "Cancelar"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "Nombre", "namePlaceholder": "Nombre",
"nameRequired": "Por favor ingresa un Nombre", "nameRequired": "Por favor ingresa un Nombre",
"updateFailed": "¡Falló el cambio de nombre del equipo!" "updateFailed": "¡Falló el cambio de nombre del equipo!"
} }

View File

@@ -87,7 +87,7 @@
"peopleField": "Campo de personas", "peopleField": "Campo de personas",
"noDate": "Sin fecha", "noDate": "Sin fecha",
"unsupportedField": "Tipo de campo no compatible", "unsupportedField": "Tipo de campo no compatible",
"modal": { "modal": {
"addFieldTitle": "Agregar campo", "addFieldTitle": "Agregar campo",
"editFieldTitle": "Editar campo", "editFieldTitle": "Editar campo",
@@ -108,7 +108,7 @@
"createErrorMessage": "Error al crear la columna personalizada", "createErrorMessage": "Error al crear la columna personalizada",
"updateErrorMessage": "Error al actualizar la columna personalizada" "updateErrorMessage": "Error al actualizar la columna personalizada"
}, },
"fieldTypes": { "fieldTypes": {
"people": "Personas", "people": "Personas",
"number": "Número", "number": "Número",

View File

@@ -14,4 +14,4 @@
"saveButton": "Salvar", "saveButton": "Salvar",
"saved": "Configurações salvas com sucesso", "saved": "Configurações salvas com sucesso",
"errorSaving": "Erro ao salvar configurações" "errorSaving": "Erro ao salvar configurações"
} }

View File

@@ -111,4 +111,4 @@
"totalActual": "Total actual cost including time-based cost + Fixed Costs.", "totalActual": "Total actual cost including time-based cost + Fixed Costs.",
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget." "variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
} }
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "Fixar como aba padrão", "pinTab": "Fixar como aba padrão",
"unpinTab": "Desfixar aba padrão", "unpinTab": "Desfixar aba padrão",
"finance": "Finance" "finance": "Finance"
} }

View File

@@ -49,4 +49,4 @@
"jobTitleCreateError": "Falha ao criar cargo", "jobTitleCreateError": "Falha ao criar cargo",
"createButton": "Criar", "createButton": "Criar",
"cancelButton": "Cancelar" "cancelButton": "Cancelar"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "Nome", "namePlaceholder": "Nome",
"nameRequired": "Por favor digite um Nome", "nameRequired": "Por favor digite um Nome",
"updateFailed": "Falha na alteração do nome da equipe!" "updateFailed": "Falha na alteração do nome da equipe!"
} }

View File

@@ -87,7 +87,7 @@
"peopleField": "Campo de pessoas", "peopleField": "Campo de pessoas",
"noDate": "Sem data", "noDate": "Sem data",
"unsupportedField": "Tipo de campo não suportado", "unsupportedField": "Tipo de campo não suportado",
"modal": { "modal": {
"addFieldTitle": "Adicionar campo", "addFieldTitle": "Adicionar campo",
"editFieldTitle": "Editar campo", "editFieldTitle": "Editar campo",
@@ -108,7 +108,7 @@
"createErrorMessage": "Falha ao criar a coluna personalizada", "createErrorMessage": "Falha ao criar a coluna personalizada",
"updateErrorMessage": "Falha ao atualizar a coluna personalizada" "updateErrorMessage": "Falha ao atualizar a coluna personalizada"
}, },
"fieldTypes": { "fieldTypes": {
"people": "Pessoas", "people": "Pessoas",
"number": "Número", "number": "Número",

View File

@@ -1,4 +1,4 @@
{ {
"doesNotExistText": "抱歉,您访问的页面不存在。", "doesNotExistText": "抱歉,您访问的页面不存在。",
"backHomeButton": "返回首页" "backHomeButton": "返回首页"
} }

View File

@@ -24,4 +24,4 @@
"step3Title": "邀请您的团队一起工作", "step3Title": "邀请您的团队一起工作",
"maxMembers": "您最多可以邀请5名成员", "maxMembers": "您最多可以邀请5名成员",
"maxTasks": "您最多可以创建5个任务" "maxTasks": "您最多可以创建5个任务"
} }

View File

@@ -93,4 +93,4 @@
"expiredDaysAgo": "{{days}}天前", "expiredDaysAgo": "{{days}}天前",
"continueWith": "继续使用{{plan}}", "continueWith": "继续使用{{plan}}",
"changeToPlan": "更改为{{plan}}" "changeToPlan": "更改为{{plan}}"
} }

View File

@@ -29,4 +29,4 @@
"calculationMethodTooltip": "此设置适用于您组织中的所有项目", "calculationMethodTooltip": "此设置适用于您组织中的所有项目",
"calculationMethodUpdated": "组织计算方法更新成功", "calculationMethodUpdated": "组织计算方法更新成功",
"calculationMethodUpdateError": "更新计算方法失败" "calculationMethodUpdateError": "更新计算方法失败"
} }

View File

@@ -9,4 +9,4 @@
"confirm": "确认", "confirm": "确认",
"cancel": "取消", "cancel": "取消",
"delete": "删除项目" "delete": "删除项目"
} }

View File

@@ -14,4 +14,4 @@
"saveButton": "保存", "saveButton": "保存",
"saved": "设置保存成功", "saved": "设置保存成功",
"errorSaving": "保存设置时出错" "errorSaving": "保存设置时出错"
} }

View File

@@ -6,4 +6,4 @@
"projects": "项目", "projects": "项目",
"settings": "设置", "settings": "设置",
"adminCenter": "管理中心" "adminCenter": "管理中心"
} }

View File

@@ -30,4 +30,4 @@
"owner": "所有者", "owner": "所有者",
"admin": "管理员", "admin": "管理员",
"member": "成员" "member": "成员"
} }

View File

@@ -6,4 +6,4 @@
"email": "电子邮件", "email": "电子邮件",
"lastActivity": "最后活动", "lastActivity": "最后活动",
"refresh": "刷新用户" "refresh": "刷新用户"
} }

View File

@@ -31,4 +31,4 @@
"client": "客户" "client": "客户"
}, },
"noPermission": "您没有权限执行此操作" "noPermission": "您没有权限执行此操作"
} }

View File

@@ -2,4 +2,4 @@
"loggingOut": "正在登出...", "loggingOut": "正在登出...",
"authenticating": "正在认证...", "authenticating": "正在认证...",
"gettingThingsReady": "正在为您准备..." "gettingThingsReady": "正在为您准备..."
} }

View File

@@ -9,4 +9,4 @@
"orText": "或", "orText": "或",
"successTitle": "重置指令已发送!", "successTitle": "重置指令已发送!",
"successMessage": "重置信息已发送到您的电子邮件。请检查您的电子邮件。" "successMessage": "重置信息已发送到您的电子邮件。请检查您的电子邮件。"
} }

View File

@@ -24,4 +24,4 @@
"loginErrorTitle": "登录失败", "loginErrorTitle": "登录失败",
"loginErrorMessage": "请检查您的电子邮件和密码并重试" "loginErrorMessage": "请检查您的电子邮件和密码并重试"
} }
} }

View File

@@ -28,4 +28,4 @@
"orText": "或", "orText": "或",
"reCAPTCHAVerificationError": "reCAPTCHA验证错误", "reCAPTCHAVerificationError": "reCAPTCHA验证错误",
"reCAPTCHAVerificationErrorMessage": "我们无法验证您的reCAPTCHA。请重试。" "reCAPTCHAVerificationErrorMessage": "我们无法验证您的reCAPTCHA。请重试。"
} }

View File

@@ -11,4 +11,4 @@
"returnToLoginButton": "返回登录", "returnToLoginButton": "返回登录",
"confirmPasswordRequired": "请确认您的新密码", "confirmPasswordRequired": "请确认您的新密码",
"passwordMismatch": "两次输入的密码不匹配" "passwordMismatch": "两次输入的密码不匹配"
} }

View File

@@ -6,4 +6,4 @@
"reconnecting": "与服务器断开连接。", "reconnecting": "与服务器断开连接。",
"connection-lost": "无法连接到服务器。请检查您的互联网连接。", "connection-lost": "无法连接到服务器。请检查您的互联网连接。",
"connection-restored": "成功连接到服务器" "connection-restored": "成功连接到服务器"
} }

View File

@@ -10,4 +10,4 @@
"create": "创建", "create": "创建",
"templateDrawerTitle": "从模板中选择", "templateDrawerTitle": "从模板中选择",
"createProject": "创建项目" "createProject": "创建项目"
} }

View File

@@ -4,4 +4,4 @@
"addAnother": "添加另一个", "addAnother": "添加另一个",
"goBack": "返回", "goBack": "返回",
"continue": "继续" "continue": "继续"
} }

View File

@@ -43,4 +43,4 @@
"tasks": "任务", "tasks": "任务",
"refresh": "刷新" "refresh": "刷新"
} }
} }

View File

@@ -5,4 +5,4 @@
"goBack": "返回", "goBack": "返回",
"continue": "继续", "continue": "继续",
"skipForNow": "暂时跳过" "skipForNow": "暂时跳过"
} }

View File

@@ -26,4 +26,4 @@
"noSubtasks": "无子任务", "noSubtasks": "无子任务",
"showSubtasks": "显示子任务", "showSubtasks": "显示子任务",
"hideSubtasks": "隐藏子任务" "hideSubtasks": "隐藏子任务"
} }

View File

@@ -3,4 +3,4 @@
"subtitle": "请立即升级。", "subtitle": "请立即升级。",
"button": "立即升级", "button": "立即升级",
"checking": "正在检查订阅状态..." "checking": "正在检查订阅状态..."
} }

View File

@@ -28,4 +28,4 @@
"acceptAndJoin": "接受并加入", "acceptAndJoin": "接受并加入",
"noNotifications": "没有通知" "noNotifications": "没有通知"
} }
} }

View File

@@ -2,4 +2,4 @@
"nameYourOrganization": "命名您的组织。", "nameYourOrganization": "命名您的组织。",
"worklenzAccountTitle": "为您的Worklenz账户选择一个名称。", "worklenzAccountTitle": "为您的Worklenz账户选择一个名称。",
"continue": "继续" "continue": "继续"
} }

View File

@@ -21,4 +21,4 @@
"selectColor": "选择颜色", "selectColor": "选择颜色",
"managePhases": "管理阶段", "managePhases": "管理阶段",
"close": "关闭" "close": "关闭"
} }

View File

@@ -47,4 +47,4 @@
"weightedProgress": "加权进度", "weightedProgress": "加权进度",
"weightedProgressTooltip": "基于子任务权重计算进度", "weightedProgressTooltip": "基于子任务权重计算进度",
"timeProgress": "基于时间的进度" "timeProgress": "基于时间的进度"
} }

View File

@@ -11,4 +11,4 @@
"deleteConfirmationCancel": "取消", "deleteConfirmationCancel": "取消",
"segmentedTooltip": "即将推出!在列表视图和缩略图视图之间切换。", "segmentedTooltip": "即将推出!在列表视图和缩略图视图之间切换。",
"emptyText": "项目中没有附件。" "emptyText": "项目中没有附件。"
} }

View File

@@ -111,4 +111,4 @@
"totalActual": "Total actual cost including time-based cost + Fixed Costs.", "totalActual": "Total actual cost including time-based cost + Fixed Costs.",
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget." "variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
} }
} }

View File

@@ -38,4 +38,4 @@
"includeArchivedTasks": "包含已归档任务", "includeArchivedTasks": "包含已归档任务",
"export": "导出" "export": "导出"
} }
} }

View File

@@ -14,4 +14,4 @@
"memberCount": "成员", "memberCount": "成员",
"membersCountPlural": "成员", "membersCountPlural": "成员",
"emptyText": "项目中没有附件。" "emptyText": "项目中没有附件。"
} }

View File

@@ -3,4 +3,4 @@
"addButton": "添加", "addButton": "添加",
"cancelButton": "取消", "cancelButton": "取消",
"deleteButton": "删除" "deleteButton": "删除"
} }

View File

@@ -12,4 +12,4 @@
"pinTab": "固定为默认标签页", "pinTab": "固定为默认标签页",
"unpinTab": "取消固定默认标签页", "unpinTab": "取消固定默认标签页",
"finance": "财务" "finance": "财务"
} }

View File

@@ -1,11 +1,11 @@
{ {
"importTaskTemplate": "导入任务模板", "importTaskTemplate": "导入任务模板",
"templateName": "模板名称", "templateName": "模板名称",
"templateDescription": "模板描述", "templateDescription": "模板描述",
"selectedTasks": "已选任务", "selectedTasks": "已选任务",
"tasks": "任务", "tasks": "任务",
"templates": "模板", "templates": "模板",
"remove": "移除", "remove": "移除",
"cancel": "取消", "cancel": "取消",
"import": "导入" "import": "导入"
} }

View File

@@ -1,7 +1,7 @@
{ {
"title": "项目成员", "title": "项目成员",
"searchLabel": "通过添加名称或电子邮件添加成员", "searchLabel": "通过添加名称或电子邮件添加成员",
"searchPlaceholder": "输入名称或电子邮件", "searchPlaceholder": "输入名称或电子邮件",
"inviteAsAMember": "邀请为成员", "inviteAsAMember": "邀请为成员",
"inviteNewMemberByEmail": "通过电子邮件邀请新成员" "inviteNewMemberByEmail": "通过电子邮件邀请新成员"
} }

View File

@@ -28,4 +28,4 @@
"projectDatesInfo": "项目时间线信息", "projectDatesInfo": "项目时间线信息",
"projectCategoryTooltip": "项目类别", "projectCategoryTooltip": "项目类别",
"defaultTaskName": "无标题任务" "defaultTaskName": "无标题任务"
} }

View File

@@ -24,4 +24,4 @@
"cancel": "取消", "cancel": "取消",
"save": "保存", "save": "保存",
"templateNamePlaceholder": "输入模板名称" "templateNamePlaceholder": "输入模板名称"
} }

View File

@@ -73,4 +73,4 @@
"needsAttentionText": "需要关注", "needsAttentionText": "需要关注",
"atRiskText": "有风险", "atRiskText": "有风险",
"goodText": "良好" "goodText": "良好"
} }

View File

@@ -28,4 +28,4 @@
"todoText": "待办", "todoText": "待办",
"doingText": "进行中", "doingText": "进行中",
"doneText": "已完成" "doneText": "已完成"
} }

View File

@@ -30,4 +30,4 @@
"overdueTasksColumn": "逾期任务", "overdueTasksColumn": "逾期任务",
"completedTasksColumn": "已完成任务", "completedTasksColumn": "已完成任务",
"ongoingTasksColumn": "进行中任务" "ongoingTasksColumn": "进行中任务"
} }

View File

@@ -19,4 +19,4 @@
"nameColumn": "名称", "nameColumn": "名称",
"projectsColumn": "项目", "projectsColumn": "项目",
"membersColumn": "成员" "membersColumn": "成员"
} }

View File

@@ -49,4 +49,4 @@
"statusText": "状态", "statusText": "状态",
"priorityText": "优先级", "priorityText": "优先级",
"phaseText": "阶段" "phaseText": "阶段"
} }

View File

@@ -28,4 +28,4 @@
"projectUpdateText": "项目更新", "projectUpdateText": "项目更新",
"clientText": "客户", "clientText": "客户",
"teamText": "团队" "teamText": "团队"
} }

View File

@@ -41,4 +41,4 @@
"setCategoryText": "设置类别", "setCategoryText": "设置类别",
"searchByNameInputPlaceholder": "按名称搜索", "searchByNameInputPlaceholder": "按名称搜索",
"todayText": "今天" "todayText": "今天"
} }

View File

@@ -5,4 +5,4 @@
"timeReports": "用时报告", "timeReports": "用时报告",
"estimateVsActual": "预计用时 vs 实际用时", "estimateVsActual": "预计用时 vs 实际用时",
"currentOrganizationTooltip": "当前的组织" "currentOrganizationTooltip": "当前的组织"
} }

View File

@@ -31,4 +31,4 @@
"totalLogged": "总记录", "totalLogged": "总记录",
"loggedBillable": "已记录可计费", "loggedBillable": "已记录可计费",
"loggedNonBillable": "已记录不可计费" "loggedNonBillable": "已记录不可计费"
} }

View File

@@ -7,4 +7,4 @@
"searchPlaceholder": "按名称搜索", "searchPlaceholder": "按名称搜索",
"emptyText": "在更新或创建项目时可以创建类别。", "emptyText": "在更新或创建项目时可以创建类别。",
"colorChangeTooltip": "点击更改颜色" "colorChangeTooltip": "点击更改颜色"
} }

View File

@@ -12,4 +12,4 @@
"passwordMismatch": "密码不匹配!", "passwordMismatch": "密码不匹配!",
"passwordRequirements": "新密码应至少包含8个字符包括一个大写字母、一个数字和一个符号。", "passwordRequirements": "新密码应至少包含8个字符包括一个大写字母、一个数字和一个符号。",
"updateButton": "更新密码" "updateButton": "更新密码"
} }

View File

@@ -19,4 +19,4 @@
"createClientErrorMessage": "客户创建失败!", "createClientErrorMessage": "客户创建失败!",
"updateClientSuccessMessage": "客户更新成功!", "updateClientSuccessMessage": "客户更新成功!",
"updateClientErrorMessage": "客户更新失败!" "updateClientErrorMessage": "客户更新失败!"
} }

View File

@@ -17,4 +17,4 @@
"createJobTitleErrorMessage": "职位创建失败!", "createJobTitleErrorMessage": "职位创建失败!",
"updateJobTitleSuccessMessage": "职位更新成功!", "updateJobTitleSuccessMessage": "职位更新成功!",
"updateJobTitleErrorMessage": "职位更新失败!" "updateJobTitleErrorMessage": "职位更新失败!"
} }

View File

@@ -8,4 +8,4 @@
"emptyText": "标签可以在更新或创建任务时创建。", "emptyText": "标签可以在更新或创建任务时创建。",
"pinTooltip": "点击将其固定到主菜单", "pinTooltip": "点击将其固定到主菜单",
"colorChangeTooltip": "点击更改颜色" "colorChangeTooltip": "点击更改颜色"
} }

View File

@@ -4,4 +4,4 @@
"time_zone": "时区", "time_zone": "时区",
"time_zone_required": "时区是必需的", "time_zone_required": "时区是必需的",
"save_changes": "保存更改" "save_changes": "保存更改"
} }

View File

@@ -8,4 +8,4 @@
"popupDescription": "弹出通知可能会被您的浏览器禁用。更改您的浏览器设置以允许它们。", "popupDescription": "弹出通知可能会被您的浏览器禁用。更改您的浏览器设置以允许它们。",
"unreadItemsTitle": "显示未读项目的数量", "unreadItemsTitle": "显示未读项目的数量",
"unreadItemsDescription": "您将看到每个通知的计数。" "unreadItemsDescription": "您将看到每个通知的计数。"
} }

View File

@@ -11,4 +11,4 @@
"profileLastUpdatedText": "一个月前更新", "profileLastUpdatedText": "一个月前更新",
"avatarTooltip": "点击上传头像", "avatarTooltip": "点击上传头像",
"title": "个人资料设置" "title": "个人资料设置"
} }

View File

@@ -5,4 +5,4 @@
"confirmText": "您确定吗?", "confirmText": "您确定吗?",
"okText": "是", "okText": "是",
"cancelText": "取消" "cancelText": "取消"
} }

View File

@@ -49,4 +49,4 @@
"jobTitleCreateError": "职位名称创建失败", "jobTitleCreateError": "职位名称创建失败",
"createButton": "创建", "createButton": "创建",
"cancelButton": "取消" "cancelButton": "取消"
} }

View File

@@ -12,4 +12,4 @@
"teams": "团队", "teams": "团队",
"change-password": "更改密码", "change-password": "更改密码",
"language-and-region": "语言和地区" "language-and-region": "语言和地区"
} }

View File

@@ -6,4 +6,4 @@
"confirmText": "您确定吗?", "confirmText": "您确定吗?",
"okText": "是", "okText": "是",
"cancelText": "取消" "cancelText": "取消"
} }

View File

@@ -44,4 +44,4 @@
"noResultFound": "输入电子邮件地址并按回车键...", "noResultFound": "输入电子邮件地址并按回车键...",
"jobTitlesFetchError": "获取职位失败", "jobTitlesFetchError": "获取职位失败",
"invitationResent": "邀请重新发送成功!" "invitationResent": "邀请重新发送成功!"
} }

View File

@@ -13,4 +13,4 @@
"namePlaceholder": "名称", "namePlaceholder": "名称",
"nameRequired": "请输入名称", "nameRequired": "请输入名称",
"updateFailed": "团队名称更改失败!" "updateFailed": "团队名称更改失败!"
} }

View File

@@ -26,4 +26,4 @@
"add-sub-task": "+ 添加子任务", "add-sub-task": "+ 添加子任务",
"refresh-sub-tasks": "刷新子任务" "refresh-sub-tasks": "刷新子任务"
} }
} }

View File

@@ -31,4 +31,4 @@
"intervalWeeks": "间隔(周)", "intervalWeeks": "间隔(周)",
"intervalMonths": "间隔(月)", "intervalMonths": "间隔(月)",
"saveChanges": "保存更改" "saveChanges": "保存更改"
} }

View File

@@ -126,4 +126,4 @@
"cancelMarkAsDone": "否,保持当前状态", "cancelMarkAsDone": "否,保持当前状态",
"markAsDoneDescription": "您已将进度设置为 100%。您想将任务状态更新为\"完成\"吗?" "markAsDoneDescription": "您已将进度设置为 100%。您想将任务状态更新为\"完成\"吗?"
} }
} }

View File

@@ -80,4 +80,4 @@
"cannotMoveStatus": "无法移动状态", "cannotMoveStatus": "无法移动状态",
"cannotMoveStatusMessage": "无法移动此状态,因为这会使\"{{categoryName}}\"类别为空。每个类别必须至少有一个状态。", "cannotMoveStatusMessage": "无法移动此状态,因为这会使\"{{categoryName}}\"类别为空。每个类别必须至少有一个状态。",
"ok": "确定" "ok": "确定"
} }

View File

@@ -80,7 +80,7 @@
"peopleField": "人员字段", "peopleField": "人员字段",
"noDate": "无日期", "noDate": "无日期",
"unsupportedField": "不支持的字段类型", "unsupportedField": "不支持的字段类型",
"modal": { "modal": {
"addFieldTitle": "添加字段", "addFieldTitle": "添加字段",
"editFieldTitle": "编辑字段", "editFieldTitle": "编辑字段",
@@ -101,7 +101,7 @@
"createErrorMessage": "创建自定义列失败", "createErrorMessage": "创建自定义列失败",
"updateErrorMessage": "更新自定义列失败" "updateErrorMessage": "更新自定义列失败"
}, },
"fieldTypes": { "fieldTypes": {
"people": "人员", "people": "人员",
"number": "数字", "number": "数字",
@@ -127,4 +127,4 @@
"recurring": "重复任务" "recurring": "重复任务"
} }
} }
} }

View File

@@ -36,4 +36,4 @@
"recurring": "重复任务" "recurring": "重复任务"
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More