Repository navigation
[Merge ATS] Build the Recruiting page, provider card, and navigation - #100136
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx bun ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
|
@DylanDylann Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06d8686a43
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
Can anyone help run the translation script? cc: @yuwenmemon |
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Core design doc issue.
Reviewer Checklist
Screenshots/Videos
|
|
@bernhardoj All good, just a few NITs |
|
Addressed them all. Just need to run the translation script before we can merge this. |
|
@bernhardoj I gotchu |
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 1d73cac6..829a40c6 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -4765,6 +4765,7 @@ ${amount} für ${merchant} – ${date}`,
readOnlyActionTitle: 'Nicht so schnell …',
readOnlyActionPrompt: 'Ihre Arbeitsbereichsrolle kann diese Einstellungen anzeigen, aber nicht bearbeiten.',
noAccessActionPrompt: 'Ihre Arbeitsbereichsrolle hat keinen Zugriff auf diese Einstellungen. Bitten Sie eine/n Admin, falls Sie Zugriff benötigen.',
+ recruiting: 'Personalbeschaffung',
},
createdForClient: {
title: 'Du hast einen Workspace für deinen Kunden erstellt!',
@@ -8434,7 +8435,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
approvalModeWarningConfirm: 'Genehmigungsmodus ändern',
approvalModeDescriptions: {
basic: 'Alle Benutzer reichen zur Bearbeitung und Genehmigung bei einer einzigen Person ein.',
- manager: (providerName: string) => `Mitarbeitende reichen Berichte bei ihrer in ${providerName} hinterlegten direkten Führungskraft ein.`,
+ manager: (providerName: string) => `Mitarbeitende reichen Berichte bei ihrer direkten Führungskraft ein, die in ${providerName} konfiguriert ist.`,
custom: 'Ich richte Genehmigungs-Workflows in Expensify manuell ein.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -8488,28 +8489,38 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
syncNow: 'Jetzt synchronisieren',
disconnect: 'Trennen',
disconnectTitle: (providerName: string) => `${providerName} trennen`,
- disconnectPrompt: (providerName: string) => `Möchten Sie ${providerName} wirklich trennen?`,
+ disconnectPrompt: (providerName: string) => `Sind Sie sicher, dass Sie ${providerName} trennen möchten?`,
lastSync: (relativeDate: string) => `Zuletzt synchronisiert ${relativeDate}`,
notSync: 'Nicht synchronisiert',
- syncError: (providerName: string) => `Verbindung zu ${providerName} nicht möglich`,
+ syncError: (providerName: string) => `Verbindung mit ${providerName} nicht möglich`,
authenticationError: (providerName: string) => `Verbindung mit ${providerName} aufgrund einer abgelaufenen Verknüpfung nicht möglich.`,
reconnect: 'Erneut verbinden',
reconnectLink: 'Erneut verbinden.',
notSet: 'Nicht festgelegt',
completeSetup: 'Einrichtung abschließen',
approvalMode: 'Genehmigungsmodus',
- finalApprover: 'Endgültige:r Genehmiger:in',
- approvalModes: {
- basic: 'Einfache Genehmigung',
- manager: 'Manager-Genehmigung',
- custom: 'Benutzerdefinierte Genehmigung',
- },
+ finalApprover: 'Letzte Freigebende*r',
+ approvalModes: {basic: 'Einfache Genehmigung', manager: 'Genehmigung durch Manager', custom: 'Benutzerdefinierte Genehmigung', advanced: 'Erweiterte Genehmigung'},
syncLimitReached: {title: 'Versuchen Sie es morgen noch einmal', prompt: 'Sie haben Ihr Synchronisierungslimit für heute erreicht.'},
},
emptyDomain: {
title: 'Stärken Sie Ihre Sicherheit mit Domains',
subtitle: 'Verlangen Sie, dass Mitglieder in Ihrer Domain sich per Single Sign-On anmelden, schränken Sie das Erstellen von Arbeitsbereichen ein und mehr.',
},
+ recruiting: {
+ title: 'Personalbeschaffung',
+ connectionsSubtitle:
+ 'Verbinden Sie Ihr Recruiting-System, um Kandidatendaten zu synchronisieren, Erstattungen automatisch den richtigen Personen zuzuordnen und die Ausgaben Ihres Teams ohne manuelle Arbeit korrekt zu halten.',
+ alreadyConnectedTitle: 'Es kann keine Verbindung zu mehreren ATS-Plattformen hergestellt werden',
+ alreadyConnectedPrompt: 'Sie müssen Ihr aktuelles ATS trennen, bevor Sie ein anderes verbinden.',
+ syncing: 'Kandidaten werden synchronisiert',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Verbunden. ${setupLink ? `<a href="${setupLink}">Einrichtung abschließen</a>` : 'Einrichtung abschließen'} zum Importieren von Kandidaten.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Sie sehen Ihr ATS hier nicht? <a href="#">Fragen Sie Concierge</a>, und wir können es hinzufügen.</muted-text-label>`,
+ importSettings: 'Import-Einstellungen',
+ defaultApprover: 'Standardgenehmiger',
+ approverFields: {recruiter: 'Personalvermittler', recruitingCoordinator: 'Recruiting-Koordinator'},
+ },
},
getAssistancePage: {
title: 'Hilfe erhalten',
diff --git a/src/languages/el.ts b/src/languages/el.ts
index 282a6a39..f05d815b 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -4844,6 +4844,7 @@ ${amount} για ${merchant} - ${date}`,
deleteTravelInvoicingError: 'Η εταιρεία σας έχει ακόμα ενεργοποιημένη τη συγκεντρωτική χρέωση ταξιδιών.',
vendors: 'Προμηθευτές',
noAccessActionPrompt: 'Ο ρόλος σας σε αυτόν τον χώρο εργασίας δεν έχει πρόσβαση σε αυτές τις ρυθμίσεις. Ζητήστε από έναν διαχειριστή να σας δώσει πρόσβαση, αν τη χρειάζεστε.',
+ recruiting: 'Προσλήψεις',
},
createdForClient: {
title: 'Δημιουργήσατε έναν χώρο εργασίας για τον πελάτη σας!',
@@ -7464,7 +7465,7 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
approvalModeDescriptions: {
basic: 'Όλοι οι χρήστες υποβάλλουν σε ένα μόνο άτομο για επεξεργασία και έγκριση.',
manager: (providerName: string) => `Οι υπάλληλοι υποβάλλουν αναφορές στον άμεσο προϊστάμενό τους που έχει ρυθμιστεί στο ${providerName}.`,
- custom: 'Θα ρυθμίσω χειροκίνητα ροές έγκρισης στο Expensify.',
+ custom: 'Θα ρυθμίσω χειροκίνητα τις ροές έγκρισης στο Expensify.',
},
syncStageName: (stage) => {
switch (stage) {
@@ -7505,7 +7506,7 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>Συνδέθηκε. ${setupLink ? `<a href="${setupLink}">Ολοκλήρωση ρύθμισης</a>` : 'Ολοκληρώστε τη ρύθμιση'} για εισαγωγή υπαλλήλων.</muted-text-label>`,
+ `<muted-text-label>Συνδέθηκε. ${setupLink ? `<a href="${setupLink}">Ολοκληρώστε τη ρύθμιση</a>` : 'Ολοκληρώστε τη ρύθμιση'} για την εισαγωγή υπαλλήλων.</muted-text-label>`,
mergeHR: {
groups: {
title: 'Ομάδες',
@@ -7516,26 +7517,22 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
merge: {
connections: 'Συνδέσεις',
connect: 'Σύνδεση',
- findIntegration: 'Βρείτε ενοποίηση',
+ findIntegration: 'Εύρεση ενοποίησης',
syncNow: 'Συγχρονισμός τώρα',
disconnect: 'Αποσύνδεση',
disconnectTitle: (providerName: string) => `Αποσύνδεση ${providerName}`,
disconnectPrompt: (providerName: string) => `Είστε βέβαιοι ότι θέλετε να αποσυνδέσετε το ${providerName};`,
lastSync: (relativeDate: string) => `Τελευταίος συγχρονισμός ${relativeDate}`,
- notSync: 'Δεν έχει γίνει συγχρονισμός',
+ notSync: 'Δεν έχει συγχρονιστεί',
syncError: (providerName: string) => `Δεν είναι δυνατή η σύνδεση με το ${providerName}`,
authenticationError: (providerName: string) => `Δεν είναι δυνατή η σύνδεση με το ${providerName} λόγω ληγμένης σύνδεσης.`,
- reconnect: 'Επανασύνδεση',
+ reconnect: 'Επανασυνδεθείτε',
reconnectLink: 'Επανασυνδεθείτε.',
notSet: 'Δεν έχει οριστεί',
completeSetup: 'Ολοκληρώστε τη ρύθμιση',
approvalMode: 'Λειτουργία έγκρισης',
- finalApprover: 'Τελικός εγκρίνων',
- approvalModes: {
- basic: 'Βασική έγκριση',
- manager: 'Έγκριση προϊσταμένου',
- custom: 'Προσαρμοσμένη έγκριση',
- },
+ finalApprover: 'Τελικός εγκριτής',
+ approvalModes: {basic: 'Βασική έγκριση', manager: 'Έγκριση διευθυντή', custom: 'Προσαρμοσμένη έγκριση', advanced: 'Προηγμένη έγκριση'},
syncLimitReached: {
title: 'Δοκιμάστε ξανά αύριο',
prompt: 'Έχετε φτάσει το όριο συγχρονισμών σας για σήμερα.',
@@ -8674,6 +8671,20 @@ ${reportName}`,
findVendor: 'Εύρεση προμηθευτή',
managedInAccountingSoftware: 'Οι προμηθευτές διαχειρίζονται στο',
},
+ recruiting: {
+ title: 'Προσλήψεις',
+ connectionsSubtitle:
+ 'Συνδεθείτε με το σύστημα προσλήψεών σας για να συγχρονίζετε τα δεδομένα υποψηφίων, να αντιστοιχίζετε αυτόματα τις αποζημιώσεις στα σωστά άτομα και να διατηρείτε τις δαπάνες της ομάδας σας ακριβείς χωρίς χειροκίνητη εργασία.',
+ alreadyConnectedTitle: 'Αδυναμία σύνδεσης σε πολλές πλατφόρμες ATS',
+ alreadyConnectedPrompt: 'Πρέπει να αποσυνδέσετε το τρέχον ATS σας πριν συνδέσετε κάποιο άλλο.',
+ syncing: 'Γίνεται συγχρονισμός υποψηφίων',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Συνδέθηκε. ${setupLink ? `<a href="${setupLink}">Ολοκληρώστε τη ρύθμιση</a>` : 'Ολοκληρώστε τη ρύθμιση'} για εισαγωγή υποψηφίων.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Δεν βλέπετε εδώ το ATS σας; <a href="#">Ρωτήστε το Concierge</a> και μπορούμε να το προσθέσουμε.</muted-text-label>`,
+ importSettings: 'Ρυθμίσεις εισαγωγής',
+ defaultApprover: 'Προεπιλεγμένος εγκρίνων',
+ approverFields: {recruiter: 'Στρατολογητής', recruitingCoordinator: 'Συντονιστής προσλήψεων'},
+ },
},
getAssistancePage: {
title: 'Λάβετε βοήθεια',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 2edd3940..73d70ffd 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -4702,6 +4702,7 @@ ${amount} para ${merchant} - ${date}`,
peopleAdminAlternateText: 'Gestiona miembros y flujos de aprobación.',
paymentsAdminAlternateText: 'Gestiona los pagos del flujo de trabajo.',
noAccessActionPrompt: 'Tu rol en el espacio de trabajo no tiene acceso a estos ajustes. Pide a un administrador que te lo habilite si lo necesitas.',
+ recruiting: 'Reclutamiento',
},
createdForClient: {
title: '¡Has creado un espacio de trabajo para tu cliente!',
@@ -7206,8 +7207,8 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
`¿Seguro que quieres cambiar el modo de aprobación de este espacio de trabajo? Obtén más información sobre los diferentes modos de flujo de trabajo con ${providerName} en nuestro <a href="${helpSiteURL}">sitio de ayuda</a>.`,
approvalModeWarningConfirm: 'Cambiar modo de aprobación',
approvalModeDescriptions: {
- basic: 'Todos los usuarios envían a una sola persona para su procesamiento y aprobación.',
- manager: (providerName: string) => `Los empleados envían informes a su gerente directo configurado en ${providerName}.`,
+ basic: 'Todos los usuarios envían a una única persona para procesar y aprobar.',
+ manager: (providerName: string) => `Los empleados envían reportes a su responsable directo configurado en ${providerName}.`,
custom: 'Configuraré manualmente los flujos de aprobación en Expensify.',
},
syncStageName: (stage) => {
@@ -7249,7 +7250,7 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>Conectado. ${setupLink ? `<a href="${setupLink}">Completa la configuración</a>` : 'Completar configuración'} para importar empleados.</muted-text-label>`,
+ `<muted-text-label>Conectado. ${setupLink ? `<a href="${setupLink}">Completar configuración</a>` : 'Completar configuración'} para importar empleados.</muted-text-label>`,
mergeHR: {
groups: {title: 'Grupos', description: 'Elige los grupos de empleados que te gustaría sincronizar con este espacio de trabajo'},
},
@@ -7265,18 +7266,14 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
lastSync: (relativeDate: string) => `Última sincronización ${relativeDate}`,
notSync: 'No sincronizado',
syncError: (providerName: string) => `No se puede conectar con ${providerName}`,
- authenticationError: (providerName: string) => `No se puede conectar a ${providerName} porque la conexión ha caducado.`,
+ authenticationError: (providerName: string) => `No se puede conectar a ${providerName} debido a que la conexión ha caducado.`,
reconnect: 'Volver a conectar',
reconnectLink: 'Volver a conectar.',
- notSet: 'No configurado',
+ notSet: 'No establecido',
completeSetup: 'Completar configuración',
approvalMode: 'Modo de aprobación',
finalApprover: 'Aprobador final',
- approvalModes: {
- basic: 'Aprobación básica',
- manager: 'Aprobación del gerente',
- custom: 'Aprobación personalizada',
- },
+ approvalModes: {basic: 'Aprobación básica', manager: 'Aprobación del responsable', custom: 'Aprobación personalizada', advanced: 'Aprobación avanzada'},
syncLimitReached: {title: 'Inténtalo de nuevo mañana', prompt: 'Has alcanzado tu límite de sincronización de hoy.'},
},
export: {
@@ -8349,6 +8346,20 @@ ${reportName}`,
title: 'Mejora tu seguridad con dominios',
subtitle: 'Exige que los miembros de tu dominio inicien sesión mediante inicio de sesión único, restrinjan la creación de espacios de trabajo y más.',
},
+ recruiting: {
+ title: 'Reclutamiento',
+ connectionsSubtitle:
+ 'Conéctate a tu sistema de selección para sincronizar los datos de los candidatos, vincular automáticamente los reembolsos con las personas correctas y mantener los gastos de tu equipo precisos sin trabajo manual.',
+ alreadyConnectedTitle: 'No se puede conectar a varias plataformas ATS',
+ alreadyConnectedPrompt: 'Debes desconectar tu ATS actual antes de conectar otro.',
+ syncing: 'Sincronizando candidatos',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Conectado. ${setupLink ? `<a href="${setupLink}">Completar configuración</a>` : 'Completar configuración'} para importar candidatos.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>¿No ves tu ATS aquí? <a href="#">Pregunta a Concierge</a> y podremos añadirlo.</muted-text-label>`,
+ importSettings: 'Importar ajustes',
+ defaultApprover: 'Aprobador predeterminado',
+ approverFields: {recruiter: 'Reclutador', recruitingCoordinator: 'Coordinador de selección'},
+ },
},
getAssistancePage: {
title: 'Obtener ayuda',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 3f081e74..5bc7fa27 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -4772,6 +4772,7 @@ ${amount} pour ${merchant} - ${date}`,
readOnlyActionTitle: 'Pas si vite...',
readOnlyActionPrompt: 'Votre rôle dans cet espace de travail peut afficher ces paramètres, mais ne peut pas les modifier.',
noAccessActionPrompt: 'Votre rôle dans l’espace de travail n’a pas accès à ces paramètres. Demandez à un administrateur si vous en avez besoin.',
+ recruiting: 'Recrutement',
},
createdForClient: {
title: 'Vous avez créé un espace de travail pour votre client !',
@@ -8457,8 +8458,8 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
approvalModeWarningConfirm: 'Modifier le mode d’approbation',
approvalModeDescriptions: {
basic: 'Tous les utilisateurs soumettent à une seule personne pour traitement et approbation.',
- manager: (providerName: string) => `Les employé·e·s soumettent leurs rapports à leur responsable direct configuré dans ${providerName}.`,
- custom: 'Je configurerai manuellement les circuits de validation dans Expensify.',
+ manager: (providerName: string) => `Les employés soumettent des notes de frais à leur manager direct configuré dans ${providerName}.`,
+ custom: 'Je vais configurer manuellement les workflows d’approbation dans Expensify.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
switch (stage) {
@@ -8499,7 +8500,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>Connecté. ${setupLink ? `<a href="${setupLink}">Terminer la configuration</a>` : 'Terminer la configuration'} pour importer les employés.</muted-text-label>`,
+ `<muted-text-label>Connecté. ${setupLink ? `<a href="${setupLink}">Terminer la configuration</a>` : 'Terminer la configuration'} pour importer des employés.</muted-text-label>`,
mergeHR: {
groups: {title: 'Groupes', description: 'Choisissez les groupes d’employés que vous souhaitez synchroniser avec cet espace de travail'},
},
@@ -8507,32 +8508,42 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
merge: {
connections: 'Connexions',
connect: 'Connecter',
- findIntegration: 'Rechercher une intégration',
+ findIntegration: 'Trouver une intégration',
syncNow: 'Synchroniser maintenant',
disconnect: 'Déconnecter',
disconnectTitle: (providerName: string) => `Déconnecter ${providerName}`,
- disconnectPrompt: (providerName: string) => `Êtes-vous sûr de vouloir déconnecter ${providerName} ?`,
+ disconnectPrompt: (providerName: string) => `Voulez-vous vraiment déconnecter ${providerName} ?`,
lastSync: (relativeDate: string) => `Dernière synchronisation ${relativeDate}`,
notSync: 'Non synchronisé',
syncError: (providerName: string) => `Impossible de se connecter à ${providerName}`,
- authenticationError: (providerName: string) => `Connexion à ${providerName} impossible en raison d'une connexion expirée.`,
- reconnect: 'Reconnect',
+ authenticationError: (providerName: string) => `Connexion à ${providerName} impossible en raison d’une connexion expirée.`,
+ reconnect: 'Se reconnecter',
reconnectLink: 'Reconnectez-vous.',
notSet: 'Non défini',
completeSetup: 'Terminer la configuration',
- approvalMode: "Mode d'approbation",
+ approvalMode: 'Mode d’approbation',
finalApprover: 'Approbateur final',
- approvalModes: {
- basic: 'Approbation simple',
- manager: 'Approbation du responsable',
- custom: 'Approbation personnalisée',
- },
+ approvalModes: {basic: 'Approbation simple', manager: 'Approbation du responsable', custom: 'Approbation personnalisée', advanced: 'Approbation avancée'},
syncLimitReached: {title: 'Réessayez demain', prompt: "Vous avez atteint votre limite de synchronisation pour aujourd'hui."},
},
emptyDomain: {
title: 'Renforcez votre sécurité avec des domaines',
subtitle: 'Obligez les membres de votre domaine à se connecter via l’authentification unique, restreignez la création d’espaces de travail, et plus encore.',
},
+ recruiting: {
+ title: 'Recrutement',
+ connectionsSubtitle:
+ 'Connectez votre système de recrutement pour synchroniser les données des candidats, faire correspondre automatiquement les remboursements aux bonnes personnes et maintenir des dépenses d’équipe exactes sans travail manuel.',
+ alreadyConnectedTitle: 'Impossible de se connecter à plusieurs plateformes ATS',
+ alreadyConnectedPrompt: 'Vous devez déconnecter votre ATS actuel avant d’en connecter un autre.',
+ syncing: 'Synchronisation des candidats',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Connecté. ${setupLink ? `<a href="${setupLink}">Terminer la configuration</a>` : 'Terminer la configuration'} pour importer des candidats.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Vous ne voyez pas votre ATS ici ? <a href="#">Demandez à Concierge</a> et nous pourrons l’ajouter.</muted-text-label>`,
+ importSettings: 'Paramètres d’importation',
+ defaultApprover: 'Approbateur par défaut',
+ approverFields: {recruiter: 'Recruteur', recruitingCoordinator: 'Coordinateur recrutement'},
+ },
},
getAssistancePage: {
title: 'Obtenir de l’aide',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 2ec892de..822ffa8d 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -4738,6 +4738,7 @@ ${amount} per ${merchant} - ${date}`,
readOnlyActionTitle: 'Non così in fretta...',
readOnlyActionPrompt: 'Il tuo ruolo nello spazio di lavoro può visualizzare queste impostazioni, ma non può modificarle.',
noAccessActionPrompt: 'Il tuo ruolo nello spazio di lavoro non ha accesso a queste impostazioni. Chiedi a un amministratore se ne hai bisogno.',
+ recruiting: 'Assunzioni',
},
createdForClient: {
title: 'Hai creato uno spazio di lavoro per il tuo cliente!',
@@ -8390,8 +8391,8 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
`Sei sicuro di voler cambiare la modalità di approvazione per questo spazio di lavoro? Scopri di più sulle diverse modalità di flusso di lavoro abilitate per ${providerName} nel nostro <a href="${helpSiteURL}">sito di assistenza</a>.`,
approvalModeWarningConfirm: 'Cambia modalità di approvazione',
approvalModeDescriptions: {
- basic: 'Tutti gli utenti inviano a una singola persona per l’elaborazione e l’approvazione.',
- manager: (providerName: string) => `I dipendenti inviano i report al proprio responsabile diretto configurato in ${providerName}.`,
+ basic: "Tutti gli utenti inviano a una singola persona per l'elaborazione e l'approvazione.",
+ manager: (providerName: string) => `I dipendenti inviano i report al loro responsabile diretto configurato in ${providerName}.`,
custom: 'Imposterò manualmente i flussi di approvazione in Expensify.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -8454,19 +8455,29 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
reconnectLink: 'Riconnetti.',
notSet: 'Non impostato',
completeSetup: 'Completa configurazione',
- approvalMode: 'Modalità di approvazione',
- finalApprover: 'Approvatore finale',
- approvalModes: {
- basic: 'Approvazione di base',
- manager: 'Approvazione del responsabile',
- custom: 'Approvazione personalizzata',
- },
+ approvalMode: 'Modalità approvazione',
+ finalApprover: 'Approvazione finale',
+ approvalModes: {basic: 'Approvazione di base', manager: 'Approvazione del manager', custom: 'Approvazione personalizzata', advanced: 'Approvazione avanzata'},
syncLimitReached: {title: 'Riprova domani', prompt: 'Hai raggiunto il limite di sincronizzazioni per oggi.'},
},
emptyDomain: {
title: 'Migliora la tua sicurezza con i domini',
subtitle: 'Richiedi ai membri del tuo dominio di accedere tramite accesso Single Sign-On, limita la creazione di space di lavoro e altro ancora.',
},
+ recruiting: {
+ title: 'Assunzioni',
+ connectionsSubtitle:
+ 'Connetti il tuo sistema di recruiting per sincronizzare i dati dei candidati, abbinare automaticamente i rimborsi alle persone giuste e mantenere le spese del team accurate senza lavoro manuale.',
+ alreadyConnectedTitle: 'Impossibile connettersi a più piattaforme ATS',
+ alreadyConnectedPrompt: 'Devi disconnettere il tuo ATS attuale prima di collegarne un altro.',
+ syncing: 'Sincronizzazione candidati',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Connesso. ${setupLink ? `<a href="${setupLink}">Completa la configurazione</a>` : 'Completa configurazione'} per importare i candidati.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Non vedi il tuo ATS qui? <a href="#">Chiedi a Concierge</a> e possiamo aggiungerlo.</muted-text-label>`,
+ importSettings: 'Impostazioni di importazione',
+ defaultApprover: 'Approvatore predefinito',
+ approverFields: {recruiter: 'Recruiter', recruitingCoordinator: 'Coordinatore recruiting'},
+ },
},
getAssistancePage: {
title: 'Ottieni assistenza',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 44a1b3ed..a8bf96cf 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -4694,6 +4694,7 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの'
readOnlyActionTitle: 'ちょっと待ってください…',
readOnlyActionPrompt: 'このワークスペースでのあなたのロールは、これらの設定を表示できますが、編集することはできません。',
noAccessActionPrompt: 'このワークスペースでのあなたのロールでは、これらの設定にアクセスできません。必要な場合は管理者に依頼してください。',
+ recruiting: '採用',
},
createdForClient: {
title: 'クライアントのワークスペースを作成しました!',
@@ -8277,8 +8278,8 @@ ${reportName}`,
`このワークスペースの承認モードを変更してもよろしいですか?${providerName} 対応の各ワークフローモードについては、<a href="${helpSiteURL}">ヘルプサイト</a>で詳しくご覧いただけます。`,
approvalModeWarningConfirm: '承認モードを変更',
approvalModeDescriptions: {
- basic: 'すべてのユーザーは、処理と承認のために 1 人の担当者に提出します。',
- manager: (providerName: string) => `従業員は、${providerName} で設定された直属のマネージャーにレポートを提出します。`,
+ basic: 'すべてのユーザーが、処理と承認のために1人の担当者に提出します。',
+ manager: (providerName: string) => `従業員は、${providerName} で設定されている直属の上司にレポートを提出します。`,
custom: 'Expensify で承認ワークフローを手動で設定します。',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -8320,40 +8321,49 @@ ${reportName}`,
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>接続されました。従業員をインポートするには ${setupLink ? `<a href="${setupLink}">セットアップを完了</a>` : '設定を完了'} に接続してください。</muted-text-label>`,
+ `<muted-text-label>接続されました。従業員をインポートするには ${setupLink ? `<a href="${setupLink}">セットアップを完了</a>` : '設定を完了'} に接続します。</muted-text-label>`,
mergeHR: {
groups: {title: 'グループ', description: 'このワークスペースと同期したい従業員グループを選択してください'},
},
},
merge: {
- connections: '接続',
- connect: '接続',
+ connections: '連携',
+ connect: '接続する',
findIntegration: '連携を検索',
syncNow: '今すぐ同期',
disconnect: '切断',
- disconnectTitle: (providerName: string) => `${providerName}を切断`,
- disconnectPrompt: (providerName: string) => `${providerName}を切断してもよろしいですか?`,
+ disconnectTitle: (providerName: string) => `${providerName} を切断`,
+ disconnectPrompt: (providerName: string) => `${providerName} を本当に切断してもよろしいですか?`,
lastSync: (relativeDate: string) => `最終同期: ${relativeDate}`,
notSync: '未同期',
syncError: (providerName: string) => `${providerName}に接続できません`,
- authenticationError: (providerName: string) => `有効期限が切れた接続のため、${providerName} に接続できません。`,
+ authenticationError: (providerName: string) => `有効期限切れの接続が原因で、${providerName} に接続できません。`,
reconnect: '再接続',
- reconnectLink: '再接続する',
+ reconnectLink: '再接続します。',
notSet: '未設定',
completeSetup: '設定を完了',
approvalMode: '承認モード',
finalApprover: '最終承認者',
- approvalModes: {
- basic: '基本承認',
- manager: 'マネージャー承認',
- custom: 'カスタム承認',
- },
+ approvalModes: {basic: '基本承認', manager: 'マネージャー承認', custom: 'カスタム承認', advanced: '詳細承認'},
syncLimitReached: {title: '明日もう一度お試しください', prompt: '本日の同期上限に達しました。'},
},
emptyDomain: {
title: 'ドメインでセキュリティを強化しましょう',
subtitle: 'ドメインのメンバーにシングルサインオンでのログインを必須にし、ワークスペースの作成を制限するなどの管理ができます。',
},
+ recruiting: {
+ title: '採用',
+ connectionsSubtitle: '採用システムに接続して候補者データを同期し、払い戻しを自動的に適切な人に紐づけることで、手作業なしでチームの経費精度を保てます。',
+ alreadyConnectedTitle: '複数の ATS プラットフォームには接続できません',
+ alreadyConnectedPrompt: '別の ATS を接続する前に、現在の ATS を必ず切断する必要があります。',
+ syncing: '候補者を同期しています',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>接続済み。${setupLink ? `<a href="${setupLink}">セットアップを完了</a>` : '設定を完了'} をインポート候補として追加します。</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>ご利用のATSが見つかりませんか?<a href="#">Concierge にお問い合わせ</a>いただければ、追加できます。</muted-text-label>`,
+ importSettings: 'インポート設定',
+ defaultApprover: 'デフォルト承認者',
+ approverFields: {recruiter: '採用担当者', recruitingCoordinator: '採用コーディネーター'},
+ },
},
getAssistancePage: {
title: 'サポートを受ける',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2d899bb1..787bca70 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -4737,6 +4737,7 @@ ${amount} voor ${merchant} - ${date}`,
readOnlyActionTitle: 'Niet zo snel...',
readOnlyActionPrompt: 'Je rol in de workspace kan deze instellingen bekijken, maar niet bewerken.',
noAccessActionPrompt: 'Je rol in deze workspace heeft geen toegang tot deze instellingen. Vraag een admin als je die nodig hebt.',
+ recruiting: 'Werving',
},
createdForClient: {
title: 'Je hebt een werkruimte voor je klant aangemaakt!',
@@ -8363,9 +8364,9 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
`Weet je zeker dat je de goedkeuringsmodus voor deze werkruimte wilt wijzigen? Lees meer over de verschillende ${providerName}-ondersteunde workflowmodi op onze <a href="${helpSiteURL}">help-site</a>.`,
approvalModeWarningConfirm: 'Goedkeuringsmodus wijzigen',
approvalModeDescriptions: {
- basic: 'Alle gebruikers dienen bij één persoon in voor verwerking en goedkeuring.',
- manager: (providerName: string) => `Werknemers dienen rapporten in bij hun direct leidinggevende die is ingesteld in ${providerName}.`,
- custom: 'Ik stel goedkeuringsworkflows handmatig in in Expensify.',
+ basic: 'Alle gebruikers dienen in bij één persoon voor verwerking en goedkeuring.',
+ manager: (providerName: string) => `Werknemers dienen rapporten in bij hun direct leidinggevende die is geconfigureerd in ${providerName}.`,
+ custom: 'Ik stel zelf handmatig goedkeuringsworkflows in in Expensify.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
switch (stage) {
@@ -8406,37 +8407,47 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>Verbonden. ${setupLink ? `<a href="${setupLink}">Instellen voltooien</a>` : 'Configuratie voltooien'} om werknemers te importeren.</muted-text-label>`,
+ `<muted-text-label>Verbonden. ${setupLink ? `<a href="${setupLink}">Installatie voltooien</a>` : 'Voltooi installatie'} om werknemers te importeren.</muted-text-label>`,
mergeHR: {
groups: {title: 'Groepen', description: 'Kies de groepen werknemers die je met deze workspace wilt synchroniseren'},
},
},
merge: {
connections: 'Verbindingen',
- connect: 'Verbinden',
+ connect: 'Verbinding maken',
findIntegration: 'Integratie zoeken',
syncNow: 'Nu synchroniseren',
- disconnect: 'Ontkoppelen',
- disconnectTitle: (providerName: string) => `${providerName} ontkoppelen`,
+ disconnect: 'Verbinding verbreken',
+ disconnectTitle: (providerName: string) => `Verbinding met ${providerName} verbreken`,
disconnectPrompt: (providerName: string) => `Weet je zeker dat je ${providerName} wilt ontkoppelen?`,
lastSync: (relativeDate: string) => `Laatst gesynchroniseerd ${relativeDate}`,
notSync: 'Niet gesynchroniseerd',
syncError: (providerName: string) => `Kan geen verbinding maken met ${providerName}`,
- authenticationError: (providerName: string) => `Kan geen verbinding maken met ${providerName} vanwege een verlopen koppeling.`,
+ authenticationError: (providerName: string) => `Kan geen verbinding maken met ${providerName} vanwege een verlopen verbinding.`,
reconnect: 'Opnieuw verbinden',
reconnectLink: 'Opnieuw verbinden.',
notSet: 'Niet ingesteld',
- completeSetup: 'Configuratie voltooien',
+ completeSetup: 'Voltooi installatie',
approvalMode: 'Goedkeuringsmodus',
- finalApprover: 'Eindgoedkeurder',
- approvalModes: {
- basic: 'Basisgoedkeuring',
- manager: 'Managergoedkeuring',
- custom: 'Aangepaste goedkeuring',
- },
+ finalApprover: 'Laatste fiatteur',
+ approvalModes: {basic: 'Basisgoedkeuring', manager: 'Goedkeuring door manager', custom: 'Aangepaste goedkeuring', advanced: 'Geavanceerde goedkeuring'},
syncLimitReached: {title: 'Probeer het morgen opnieuw', prompt: 'Je hebt je synchronisatielimiet voor vandaag bereikt.'},
},
emptyDomain: {title: 'Verbeter je beveiliging met domeinen', subtitle: 'Vereis dat leden op je domein inloggen via single sign-on, beperk het aanmaken van werkruimtes en meer.'},
+ recruiting: {
+ title: 'Werving',
+ connectionsSubtitle:
+ 'Koppel je recruitmentsysteem om kandidaatgegevens te synchroniseren, vergoedingen automatisch aan de juiste personen te koppelen en de uitgaven van je team nauwkeurig te houden zonder handmatig werk.',
+ alreadyConnectedTitle: 'Kan niet met meerdere ATS-platformen verbinden',
+ alreadyConnectedPrompt: 'Je moet je huidige ATS loskoppelen voordat je een andere verbindt.',
+ syncing: 'Kandidaten synchroniseren',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Verbonden. ${setupLink ? `<a href="${setupLink}">Installatie voltooien</a>` : 'Voltooi installatie'} om kandidaten te importeren.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Zie je je ATS hier niet? <a href="#">Vraag het aan Concierge</a> en we kunnen het toevoegen.</muted-text-label>`,
+ importSettings: 'Importinstellingen',
+ defaultApprover: 'Standaardgoedkeurder',
+ approverFields: {recruiter: 'Recruiter', recruitingCoordinator: 'Coördinator werving'},
+ },
},
getAssistancePage: {
title: 'Hulp krijgen',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index f3ca0f9d..db9d9599 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -4763,6 +4763,7 @@ ${amount} dla ${merchant} - ${date}`,
readOnlyActionTitle: 'Nie tak szybko…',
readOnlyActionPrompt: 'Twoja rola w przestrzeni roboczej może wyświetlać te ustawienia, ale nie może ich edytować.',
noAccessActionPrompt: 'Twoja rola w tym zespole nie ma dostępu do tych ustawień. Jeśli go potrzebujesz, poproś administratora.',
+ recruiting: 'Rekrutacja',
},
createdForClient: {
title: 'Utworzyłeś przestrzeń roboczą dla swojego klienta!',
@@ -8385,9 +8386,9 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
`Czy na pewno chcesz zmienić tryb zatwierdzania dla tego obszaru roboczego? Dowiedz się więcej o różnych trybach przepływu pracy obsługiwanych przez ${providerName} w naszej <a href="${helpSiteURL}">witrynie pomocy</a>.`,
approvalModeWarningConfirm: 'Zmień tryb zatwierdzania',
approvalModeDescriptions: {
- basic: 'Wszyscy użytkownicy przesyłają wydatki do jednej osoby w celu ich przetworzenia i zatwierdzenia.',
- manager: (providerName: string) => `Pracownicy przesyłają raporty do swojego bezpośredniego menedżera skonfigurowanego w ${providerName}.`,
- custom: 'Ręcznie skonfiguruję procesy zatwierdzania w Expensify.',
+ basic: 'Wszyscy użytkownicy składają wnioski do jednej osoby w celu przetworzenia i zatwierdzenia.',
+ manager: (providerName: string) => `Pracownicy przesyłają raporty do swojego bezpośredniego przełożonego skonfigurowanego w ${providerName}.`,
+ custom: 'Ręcznie skonfiguruję ścieżki zatwierdzania w Expensify.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
switch (stage) {
@@ -8428,7 +8429,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>Połączono. ${setupLink ? `<a href="${setupLink}">Zakończ konfigurację</a>` : 'Zakończ konfigurację'}, aby zaimportować pracowników.</muted-text-label>`,
+ `<muted-text-label>Połączono. ${setupLink ? `<a href="${setupLink}">Dokończ konfigurację</a>` : 'Zakończ konfigurację'}, aby zaimportować pracowników.</muted-text-label>`,
mergeHR: {
groups: {title: 'Grupy', description: 'Wybierz grupy pracowników, które chcesz zsynchronizować z tą przestrzenią roboczą'},
},
@@ -8438,30 +8439,40 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
connect: 'Połącz',
findIntegration: 'Znajdź integrację',
syncNow: 'Synchronizuj teraz',
- disconnect: 'Odłącz',
+ disconnect: 'Rozłącz',
disconnectTitle: (providerName: string) => `Odłącz ${providerName}`,
- disconnectPrompt: (providerName: string) => `Czy na pewno chcesz odłączyć ${providerName}?`,
+ disconnectPrompt: (providerName: string) => `Na pewno chcesz odłączyć ${providerName}?`,
lastSync: (relativeDate: string) => `Ostatnia synchronizacja ${relativeDate}`,
- notSync: 'Niesynchronizowane',
+ notSync: 'Niezsynchronizowane',
syncError: (providerName: string) => `Nie można połączyć z ${providerName}`,
authenticationError: (providerName: string) => `Nie można połączyć z ${providerName} z powodu wygasłego połączenia.`,
reconnect: 'Połącz ponownie',
reconnectLink: 'Połącz ponownie.',
- notSet: 'Nie ustawiono',
+ notSet: 'Brak ustawienia',
completeSetup: 'Zakończ konfigurację',
approvalMode: 'Tryb zatwierdzania',
finalApprover: 'Ostateczny zatwierdzający',
- approvalModes: {
- basic: 'Podstawowe zatwierdzanie',
- manager: 'Zatwierdzanie przez menedżera',
- custom: 'Niestandardowe zatwierdzanie',
- },
+ approvalModes: {basic: 'Podstawowe zatwierdzanie', manager: 'Akceptacja przez menedżera', custom: 'Niestandardowe zatwierdzanie', advanced: 'Zaawansowane zatwierdzanie'},
syncLimitReached: {title: 'Spróbuj ponownie jutro', prompt: 'Osiągnąłeś dzienny limit synchronizacji.'},
},
emptyDomain: {
title: 'Zwiększ swoje bezpieczeństwo dzięki domenom',
subtitle: 'Wymagaj od członków swojej domeny logowania jednokrotnym logowaniem (SSO), ograniczaj tworzenie przestrzeni roboczych i nie tylko.',
},
+ recruiting: {
+ title: 'Rekrutacja',
+ connectionsSubtitle:
+ 'Połącz się ze swoim systemem rekrutacyjnym, aby synchronizować dane kandydatów, automatycznie dopasowywać zwroty kosztów do właściwych osób i utrzymywać poprawność wydatków zespołu bez ręcznej pracy.',
+ alreadyConnectedTitle: 'Nie można połączyć się z wieloma platformami ATS',
+ alreadyConnectedPrompt: 'Musisz odłączyć swój obecny ATS, zanim podłączysz inny.',
+ syncing: 'Synchronizowanie kandydatów',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Połączono. ${setupLink ? `<a href="${setupLink}">Dokończ konfigurację</a>` : 'Zakończ konfigurację'}, aby zaimportować kandydatów.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Nie widzisz tutaj swojego ATS? <a href="#">Zapytaj Concierge</a>, a my możemy go dodać.</muted-text-label>`,
+ importSettings: 'Ustawienia importu',
+ defaultApprover: 'Domyślny zatwierdzający',
+ approverFields: {recruiter: 'Rekruter', recruitingCoordinator: 'Koordynator rekrutacji'},
+ },
},
getAssistancePage: {
title: 'Uzyskaj pomoc',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 90158d37..37bf2faf 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -4730,6 +4730,7 @@ ${amount} para ${merchant} - ${date}`,
readOnlyActionTitle: 'Calma aí...',
readOnlyActionPrompt: 'Sua função no workspace pode ver essas configurações, mas não pode editá-las.',
noAccessActionPrompt: 'Sua função no espaço de trabalho não tem acesso a essas configurações. Peça a um administrador se você precisar disso.',
+ recruiting: 'Recrutamento',
},
createdForClient: {
title: 'Você criou um espaço de trabalho para seu cliente!',
@@ -8372,7 +8373,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
approvalModeWarningConfirm: 'Alterar modo de aprovação',
approvalModeDescriptions: {
basic: 'Todos os usuários enviam para uma única pessoa para processamento e aprovação.',
- manager: (providerName: string) => `Os funcionários enviam relatórios ao gestor direto configurado no ${providerName}.`,
+ manager: (providerName: string) => `Os funcionários enviam relatórios ao gerente direto configurado em ${providerName}.`,
custom: 'Vou configurar manualmente os fluxos de aprovação no Expensify.',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -8426,10 +8427,10 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
syncNow: 'Sincronizar agora',
disconnect: 'Desconectar',
disconnectTitle: (providerName: string) => `Desconectar ${providerName}`,
- disconnectPrompt: (providerName: string) => `Tem certeza de que deseja desconectar ${providerName}?`,
+ disconnectPrompt: (providerName: string) => `Tem certeza de que quer desconectar ${providerName}?`,
lastSync: (relativeDate: string) => `Última sincronização ${relativeDate}`,
notSync: 'Não sincronizado',
- syncError: (providerName: string) => `Não é possível conectar ao ${providerName}`,
+ syncError: (providerName: string) => `Não é possível conectar a ${providerName}`,
authenticationError: (providerName: string) => `Não é possível conectar a ${providerName} devido a uma conexão expirada.`,
reconnect: 'Reconectar',
reconnectLink: 'Reconectar.',
@@ -8437,17 +8438,27 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
completeSetup: 'Concluir configuração',
approvalMode: 'Modo de aprovação',
finalApprover: 'Aprovador final',
- approvalModes: {
- basic: 'Aprovação básica',
- manager: 'Aprovação do gerente',
- custom: 'Aprovação personalizada',
- },
+ approvalModes: {basic: 'Aprovação básica', manager: 'Aprovação do gerente', custom: 'Aprovação personalizada', advanced: 'Aprovação avançada'},
syncLimitReached: {title: 'Tente novamente amanhã', prompt: 'Você atingiu o limite de sincronizações de hoje.'},
},
emptyDomain: {
title: 'Aumente sua segurança com domínios',
subtitle: 'Exija que os membros do seu domínio façam login via logon único, restrinja a criação de workspaces e muito mais.',
},
+ recruiting: {
+ title: 'Recrutamento',
+ connectionsSubtitle:
+ 'Conecte-se ao seu sistema de recrutamento para sincronizar os dados de candidatos, associar automaticamente os reembolsos às pessoas certas e manter as despesas da sua equipe precisas sem trabalho manual.',
+ alreadyConnectedTitle: 'Não é possível conectar a várias plataformas de ATS',
+ alreadyConnectedPrompt: 'Você precisa desconectar o seu ATS atual antes de conectar outro.',
+ syncing: 'Sincronizando candidatos',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>Conectado. ${setupLink ? `<a href="${setupLink}">Concluir configuração</a>` : 'Concluir configuração'} para importar candidatos.</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>Não está vendo seu ATS aqui? <a href="#">Pergunte ao Concierge</a> e podemos adicioná-lo.</muted-text-label>`,
+ importSettings: 'Importar configurações',
+ defaultApprover: 'Aprovador padrão',
+ approverFields: {recruiter: 'Recrutador', recruitingCoordinator: 'Coordenador de recrutamento'},
+ },
},
getAssistancePage: {
title: 'Obter ajuda',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 0edccb09..a19cb2e8 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -4580,6 +4580,7 @@ ${amount},商户:${merchant} - 日期:${date}`,
readOnlyActionTitle: '别急……',
readOnlyActionPrompt: '你的工作区角色可以查看这些设置,但不能编辑。',
noAccessActionPrompt: '您的工作区角色无权访问这些设置。如需访问,请联系管理员。',
+ recruiting: '招聘',
},
createdForClient: {
title: '您已为客户创建了工作区!',
@@ -8062,8 +8063,8 @@ ${reportName}`,
approvalModeWarningConfirm: '更改审批模式',
approvalModeDescriptions: {
basic: '所有用户都提交给同一个人进行处理和审批。',
- manager: (providerName: string) => `员工会将报销单提交给在 ${providerName} 中配置的直属经理。`,
- custom: '我将在 Expensify 中手动设置审批工作流程。',
+ manager: (providerName: string) => `员工会将报表提交给在 ${providerName} 中配置的直属经理。`,
+ custom: '我将手动在 Expensify 中设置审批流程。',
},
syncStageName: (stage: PolicyConnectionSyncStage) => {
switch (stage) {
@@ -8104,7 +8105,7 @@ ${reportName}`,
title: 'TriNet',
},
setupIncomplete: (setupLink: string | undefined) =>
- `<muted-text-label>已连接。${setupLink ? `<a href="${setupLink}">完成设置</a>` : '完成设置'} 用于导入员工。</muted-text-label>`,
+ `<muted-text-label>已连接。${setupLink ? `<a href="${setupLink}">完成设置</a>` : '完成设置'} 将用于导入员工。</muted-text-label>`,
mergeHR: {
groups: {title: '群组', description: '选择要与此工作区同步的员工分组'},
},
@@ -8115,9 +8116,9 @@ ${reportName}`,
findIntegration: '查找集成',
syncNow: '立即同步',
disconnect: '断开连接',
- disconnectTitle: (providerName: string) => `断开 ${providerName}`,
- disconnectPrompt: (providerName: string) => `确定要断开 ${providerName} 吗?`,
- lastSync: (relativeDate: string) => `上次同步 ${relativeDate}`,
+ disconnectTitle: (providerName: string) => `断开与 ${providerName} 的连接`,
+ disconnectPrompt: (providerName: string) => `确定要断开与 ${providerName} 的连接吗?`,
+ lastSync: (relativeDate: string) => `上次同步时间:${relativeDate}`,
notSync: '未同步',
syncError: (providerName: string) => `无法连接到 ${providerName}`,
authenticationError: (providerName: string) => `由于连接已过期,无法连接到 ${providerName}。`,
@@ -8127,14 +8128,23 @@ ${reportName}`,
completeSetup: '完成设置',
approvalMode: '审批模式',
finalApprover: '最终审批人',
- approvalModes: {
- basic: '基本审批',
- manager: '经理审批',
- custom: '自定义审批',
- },
+ approvalModes: {basic: '基础审批', manager: '经理审批', custom: '自定义审批', advanced: '高级审批'},
syncLimitReached: {title: '请明天再试', prompt: '您已达到今日的同步上限。'},
},
emptyDomain: {title: '通过域名提升安全性', subtitle: '要求您域中的成员通过单点登录登录、限制工作区创建等。'},
+ recruiting: {
+ title: '招聘',
+ connectionsSubtitle: '连接招聘系统以同步候选人数据,自动将报销匹配到正确的人员,并在无需手动操作的情况下保持团队报销数据的准确。',
+ alreadyConnectedTitle: '无法连接到多个 ATS 平台',
+ alreadyConnectedPrompt: '在连接其他 ATS 之前,必须先断开当前的 ATS。',
+ syncing: '正在同步候选人',
+ setupIncomplete: (setupLink: string | undefined) =>
+ `<muted-text-label>已连接。${setupLink ? `<a href="${setupLink}">完成设置</a>` : '完成设置'} 个可导入候选项。</muted-text-label>`,
+ dontSeeYourATS: `<muted-text-label>没有看到你的 ATS?<a href="#">询问 Concierge</a>,我们可以帮你添加。</muted-text-label>`,
+ importSettings: '导入设置',
+ defaultApprover: '默认审批人',
+ approverFields: {recruiter: '招聘人员', recruitingCoordinator: '招聘协调员'},
+ },
},
getAssistancePage: {
title: '获取帮助',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
The patch fails, so I apply it manually (but only the new translation. I ignored the existing translation that the parrot update for some reason) |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
| function getMergeSetupLink(policyID: string, integration: MergeHRProviderSlug | MergeATSProviderSlug) { | ||
| const params: ConnectPolicyToMergeParams = {policyID, integration}; |
There was a problem hiding this comment.
I think we need to add the capability to pass category=ats here. The API now takes in that as a parameter, and if it's missing, defaults it to hris
There was a problem hiding this comment.
You're right. Looks like the parameter is different from the others. The others take connectionName with possible values of merge_hris and merge_ats. Is that correct?
There was a problem hiding this comment.
Yes, connectionName is merge_hris or merge_ats for the existing connection actions. This endpoint is different: it takes the provider as integration and distinguishes HRIS vs. ATS with category, so we should pass category=ats here.
|
One comment from me! |
|
🚧 yuwenmemon has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/yuwenmemon in version: 9.4.74-0 🚀
|
|
@bernhardoj Is there a way testers can access the Recruiting page? Even after following the steps, it seems testers are unable to access Screen.Recording.2026-09-08.at.8.43.43.PM.mov |
|
@vincdargento I think you need the cc: @ishpaul777 do you know how we can add it? |
|
@ishpaul777 Also check betaConfiguration
|
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.4.74-2 🚀
|




Explanation of Change
Fixed Issues
$ #99509
PROPOSAL:
Tests
Same as QA Steps
Offline tests
Same as QA Steps
QA Steps
Prerequisite:
mergeATSConnectionsbeta access/workspaces/[your_policyID]/recruiting)Complete setup
Sync and approval mode set
Basic approver • [approver name]approvalModewithadvancedand approverField ' with eitherrecruiterorrecruitingCoordinatorAdvanced approver • Recruiter (or Recruiting Coordinator) -> [approver name]approvalModewithcustomCustom approverAuthentication error
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
web.approval.mp4
web.complete.setup.mp4
web.auth.error.mp4