From 9253f47b3310929bd873f4f52f84b05a50842195 Mon Sep 17 00:00:00 2001 From: Kit Burton-Senior Date: Thu, 5 Mar 2020 15:40:33 +0000 Subject: [PATCH 1/2] manual merge from master --- resources/lang/de@formal.json | 32 ++++++++++++++++++++++ resources/lang/es@formal.json | 33 +++++++++++++++++++++++ resources/lang/fr.json | 50 +++++++++++++++++------------------ resources/lang/fr@formal.json | 36 +++++++++++++++++++++++++ 4 files changed, 126 insertions(+), 25 deletions(-) create mode 100644 resources/lang/de@formal.json create mode 100644 resources/lang/es@formal.json create mode 100644 resources/lang/fr@formal.json diff --git a/resources/lang/de@formal.json b/resources/lang/de@formal.json new file mode 100644 index 0000000..7a62a71 --- /dev/null +++ b/resources/lang/de@formal.json @@ -0,0 +1,32 @@ +{ + "If you did not request a password reset, no further action is required.": "Wenn Sie Ihr Passwort nicht zurücksetzen wollen, müssen Sie nichts weiter tun.", + "Sorry! You are not authorized to perform this action.": "Sie sind nicht berechtigt, diese Aktion auszufüren.", + "You are receiving this email because we received a password reset request for your account.": "Sie erhalten diese E-Mail, weil jemand angefordert hat, das Passwort für Ihr Konto zurückzusetzen.", + "Forgot your password?": "Haben Sie Ihr Passwort vergessen?", + "Welcome Back!": "Willkommen zurück.", + "The :resource was created!": "Die Ressource :resource wurde erfolgreich erstellt.", + "Are you sure you want to delete this resource?": "Sind Sie sicher, dass Sie diese Ressource löschen wollen?", + "Are you sure you want to delete the selected resources?": "Sind Sie sicher, dass Sie die ausgewählten Ressourcen löschen wollen?", + "Are you sure you want to detach this resource?": "Sind Sie sicher, dass Sie diese Ressource abkoppeln wollen?", + "Are you sure you want to detach the selected resources?": "Sind Sie sicher, dass Sie die ausgewählten Ressourcen abkoppeln wollen?", + "Are you sure you want to force delete this resource?": "Sind Sie sicher, dass Sie diese Ressource endgültig löschen wollen?", + "Are you sure you want to force delete the selected resources?": "Sind Sie sicher, dass Sie die ausgewählten Ressourcen endgültig löschen wollen?", + "Are you sure you want to restore this resource?": "Sind Sie sicher, dass Sie diese Ressource wiederherstellen wollen?", + "Are you sure you want to restore the selected resources?": "Sind Sie sicher, dass Sie die ausgewählten Ressourcen wiederherstellen wollen?", + "Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Ein anderer Benutzer hat diese Ressource verändert, seit diese Seite geladen wurde. Bitte laden Sie die Seite neu und versuchen Sie es dann noch einmal.", + "Are you sure you want to delete this file?": "Sind Sie sicher, dass Sie diese Datei löschen wollen?", + "Are you sure you want to run this action?": "Sind Sie sicher, dass Sie diese Aktion ausführen wollen?", + "Hold Up!": "Nicht authorisiert", + "Please select a resource to perform this action on.": "Bitte wählen Sie eine Ressource aus, auf die diese Aktion ausgeführt werden soll.", + "Something went wrong.": "Es ist ein Fehler aufgetreten.", + "The action ran successfully!": "Die Aktion wurde erfolgreich ausgeführt.", + "The government won't let us show you what's behind these doors": "Sie haben keine Berechtigung, auf diese Seite zuzugreifen.", + "We're lost in space. The page you were trying to view does not exist.": "Die von Ihnen aufgerufene Seite existiert nicht.", + "Whoops": "Ungültige Daten", + "Whoops!": "Seite nicht gefunden", + "The :resource was updated!": "Die Ressource :resource wurde erfolgreich aktualisiert.", + "The resource was updated!": "Die Ressource wurde erfolgreich aktualisiert.", + "The :resource was deleted!": "Die Ressource :resource wurde erfolgreich gelöscht.", + "The :resource was restored!": "Die Ressource :resource wurde erfolgreich wiederhergestellt.", + "Sorry, your session has expired.": "Ihre Sitzung ist leider abgelaufen." +} diff --git a/resources/lang/es@formal.json b/resources/lang/es@formal.json new file mode 100644 index 0000000..77fdf81 --- /dev/null +++ b/resources/lang/es@formal.json @@ -0,0 +1,33 @@ +{ + "If you did not request a password reset, no further action is required.": "Si usted no solicitó un restablecimiento de contraseña, no hace falta que haga nada.", + "Sorry! You are not authorized to perform this action.": "Usted no está autorizado para ejecutar esta acción.", + "You are receiving this email because we received a password reset request for your account.": "Usted está recibiendo este correo electrónico porque hemos recibido una solicitud de restablecimiento de contraseña para su cuenta.", + "Forgot Your Password?": "¿Contraseña olvidada?", + "Forgot your password?": "¿Ha olvidado su contraseña?", + "Welcome Back!": "Bienvenido de nuevo.", + "The :resource was created!": "El recurso :resource fue creado.", + "Are you sure you want to delete this resource?": "¿Está usted seguro de que quiere borrar este recurso?", + "Are you sure you want to delete the selected resources?": "¿Está usted seguro de que quiere borrar los recursos seleccionados?", + "Are you sure you want to detach this resource?": "¿Está usted seguro de que quiere separar este recurso?", + "Are you sure you want to detach the selected resources?": "¿Está usted seguro de que quiere separar los recursos seleccionados?", + "Are you sure you want to force delete this resource?": "¿Está usted seguro de que quiere forzar la eliminación de este recurso?", + "Are you sure you want to force delete the selected resources?": "¿Está usted seguro de que quiere forzar la eliminación de los recursos seleccionados?", + "Are you sure you want to restore this resource?": "¿Está usted seguro de que quiere restaurar este recurso?", + "Are you sure you want to restore the selected resources?": "¿Está usted seguro de que quiere restaurar los recursos seleccionados?", + "Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Otro usuario ha actualizado este recurso desde que esta página se ha cargado. Por favor, actualice la página y vuelva a intentarlo.", + "Are you sure you want to delete this file?": "¿Está usted seguro de que quiere borrar este archivo?", + "Are you sure you want to run this action?": "¿Está usted seguro de que quiere ejecutar esta acción?", + "Click to choose": "Haga clic para elegir", + "Please select a resource to perform this action on.": "Por favor, seleccione un recurso para ejecutar esta acción.", + "Press / to search": "Pulse / para buscar", + "The action ran successfully!": "La acción se ejecutó con éxito.", + "The government won't let us show you what's behind these doors": "Usted no tiene permiso para acceder a esta página.", + "We're lost in space. The page you were trying to view does not exist.": "La página que usted intentaba ver no existe.", + "Whoops": "Datos inválidos", + "Whoops!": "Página no encontrada", + "The :resource was updated!": "El recurso :resource fue actualizado.", + "The resource was updated!": "El recurso fue actualizado.", + "The :resource was deleted!": "El recurso :resource fue borrado.", + "The :resource was restored!": "El recurso :resource fue restaurado.", + "Sorry, your session has expired.": "Lo sentimos. Su sesión ha expirado." +} diff --git a/resources/lang/fr.json b/resources/lang/fr.json index 21740ad..2a75e29 100644 --- a/resources/lang/fr.json +++ b/resources/lang/fr.json @@ -1,15 +1,15 @@ { "Actions": "Actions", "Details": "Détails", - "If you did not request a password reset, no further action is required.": "Si vous n’avez pas fait cette demande de réinitialisation du mot de passe, vous pouvez ignorer cet email.", + "If you did not request a password reset, no further action is required.": "Si tu n’as pas fait cette demande de réinitialisation du mot de passe, tu peux ignorer cet email.", "Reset Password": "Réinitialiser le mot de passe", - "Sorry! You are not authorized to perform this action.": "Désolé ! Vous n’êtes pas autorisé à exécuter cette action.", - "You are receiving this email because we received a password reset request for your account.": "Vous recevez cet email car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.", + "Sorry! You are not authorized to perform this action.": "Désolé ! Tu n’es pas autorisé à exécuter cette action.", + "You are receiving this email because we received a password reset request for your account.": "Tu reçois cet email car nous avons reçu une demande de réinitialisation de mot de passe pour ton compte.", "Confirm Password": "Confirmer le mot de passe", "Dashboard": "Tableau de bord", "Email Address": "Adresse email", - "Forgot Your Password?": "Vous avez oublié votre mot de passe ?", - "Forgot your password?": "Vous avez oublié votre mot de passe ?", + "Forgot Your Password?": "Mot de passe oublié ?", + "Forgot your password?": "Mot de passe oublié ?", "Login": "Connexion", "Logout": "Déconnexion", "Password": "Mot de passe", @@ -30,26 +30,26 @@ "Force Delete Resource": "Forcer la suppression de la ressource", "Force Delete": "Forcer la suppression", "The :resource was created!": "La ressource :resource a été ajouté !", - "Are you sure you want to delete this resource?": "Êtes-vous sûr de vouloir supprimer cette ressource ?", - "Are you sure you want to delete the selected resources?": "Êtes-vous sûr de vouloir supprimer les ressources sélectionnés ?", - "Are you sure you want to detach this resource?": "Êtes-vous sûr de vouloir détacher cette ressource ?", - "Are you sure you want to detach the selected resources?": "Êtes-vous sûr de vouloir détacher les ressources sélectionnées ?", - "Are you sure you want to force delete this resource?": "Êtes-vous sûr de vouloir forcer la suppression de cette ressource ?", - "Are you sure you want to force delete the selected resources?": "Êtes-vous sûr de vouloir forcer la suppression des ressources sélectionnées ?", - "Are you sure you want to restore this resource?": "Êtes-vous sûr de vouloir restaurer cette ressource ?", - "Are you sure you want to restore the selected resources?": "Êtes-vous sûr de vouloir restaurer les ressources sélectionnées ?", + "Are you sure you want to delete this resource?": "Es-tu sûr de vouloir supprimer cette ressource ?", + "Are you sure you want to delete the selected resources?": "Es-tu sûr de vouloir supprimer les ressources sélectionnés ?", + "Are you sure you want to detach this resource?": "Es-tu sûr de vouloir détacher cette ressource ?", + "Are you sure you want to detach the selected resources?": "Es-tu sûr de vouloir détacher les ressources sélectionnées ?", + "Are you sure you want to force delete this resource?": "Es-tu sûr de vouloir forcer la suppression de cette ressource ?", + "Are you sure you want to force delete the selected resources?": "Es-tu sûr de vouloir forcer la suppression des ressources sélectionnées ?", + "Are you sure you want to restore this resource?": "Es-tu sûr de vouloir restaurer cette ressource ?", + "Are you sure you want to restore the selected resources?": "Es-tu sûr de vouloir restaurer les ressources sélectionnées ?", "No :resource matched the given criteria.": "Aucun :resource ne correspond aux critères indiqués.", - "Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Un autre utilisateur a mis à jour cette ressource depuis que vous avez commencé à la modifier. Veuillez actualiser la page.", - "Are you sure you want to delete this file?": "Êtes-vous sûr de vouloir supprimer ce fichier ?", - "Are you sure you want to run this action?": "Êtes-vous sûr que vous voulez exécuter cette action ?", + "Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Un autre utilisateur a mis à jour cette ressource depuis que tu as commencé à la modifier. Actualise la page, s'il te plaît.", + "Are you sure you want to delete this file?": "Es-tu sûr de vouloir supprimer ce fichier ?", + "Are you sure you want to run this action?": "Es-tu sûr de vouloir exécuter cette action ?", "Attach": "Attacher", "Attach & Attach Another": "Sauvegarder puis attacher un autre", "Cancel": "Annuler", "Choose": "Choisir", - "Choose File": "Choisissez un fichier", - "Choose Type": "Choisissez le type", - "Choose an option": "Choisissez une option", - "Click to choose": "Cliquez pour choisir", + "Choose File": "Choisis un fichier", + "Choose Type": "Choisis le type", + "Choose an option": "Choisis une option", + "Click to choose": "Cliquer pour choisir", "Reset Filters": "Effacer filtres", "Create": "Créer", "Create & Add Another": "Sauvegarder puis créer un autre", @@ -63,7 +63,7 @@ "Next": "Suivant", "Only Trashed": "Seulement supprimé", "Per Page": "Par page", - "Please select a resource to perform this action on.": "Veuillez sélectionner une ressource sur laquelle cette action sera exécutée.", + "Please select a resource to perform this action on.": "Sélectionne une ressource sur laquelle cette action sera exécutée.", "Preview": "Aperçu", "Previous": "Précédent", "No Data": "Pas de donnée", @@ -79,12 +79,12 @@ "Select All Matching": "Sélectionner tout ci-dessous", "Something went wrong.": "Un problème est survenu.", "The action ran successfully!": "L’action s’est déroulée avec succès !", - "The government won't let us show you what's behind these doors": "Le gouvernement ne nous laissera pas vous montrer ce qu’il y a derrière ces portes", + "The government won't let us show you what's behind these doors": "Le gouvernement ne nous laissera pas te montrer ce qu’il y a derrière ces portes", "This image": "Cette image", "Update": "Enregistrer", "Update & Continue Editing": "Enregistrer et continuer", "View": "Vue", - "We're lost in space. The page you were trying to view does not exist.": "Vous êtes perdu dans l’espace. La page demandée n’existe pas.", + "We're lost in space. The page you were trying to view does not exist.": "Nous sommes perdus dans l’espace. La page demandée n’existe pas.", "Show Content": "Montrer le contenu", "Hide Content": "Masquer le contenu", "Whoops": "Oups", @@ -365,7 +365,7 @@ "Action Happened At": "Heure et date", "resource": "ressource", "resources": "ressources", - "Choose date": "Choisissez une date", + "Choose date": "Choisis une date", "The :resource was updated!": "La ressource :resource a été enregistrée !", "The resource was updated!": "La ressource a été enregistrée !", "The :resource was deleted!": "La ressource :resource a été supprimée !", @@ -377,7 +377,7 @@ "Nova User": "Nova Utilisateur", "of": "de", "no file selected": "pas de fichier sélectionné", - "Sorry, your session has expired.": "Désolé, votre session a expiré.", + "Sorry, your session has expired.": "Désolé, ta session a expiré.", "Reload": "Recharger", "Key": "Clé", "Value": "Valeur", diff --git a/resources/lang/fr@formal.json b/resources/lang/fr@formal.json new file mode 100644 index 0000000..63c227a --- /dev/null +++ b/resources/lang/fr@formal.json @@ -0,0 +1,36 @@ +{ + "If you did not request a password reset, no further action is required.": "Si vous n’avez pas fait cette demande de réinitialisation du mot de passe, vous pouvez ignorer cet email.", + "Sorry! You are not authorized to perform this action.": "Désolé. Vous n’êtes pas autorisé à exécuter cette action.", + "You are receiving this email because we received a password reset request for your account.": "Vous recevez cet email car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.", + "Forgot Your Password?": "Vous avez oublié votre mot de passe ?", + "Forgot your password?": "Vous avez oublié votre mot de passe ?", + "Welcome Back!": "Bievenue.", + "The :resource was created!": "La ressource :resource a été ajouté.", + "Are you sure you want to delete this resource?": "Êtes-vous sûr de vouloir supprimer cette ressource ?", + "Are you sure you want to delete the selected resources?": "Êtes-vous sûr de vouloir supprimer les ressources sélectionnés ?", + "Are you sure you want to detach this resource?": "Êtes-vous sûr de vouloir détacher cette ressource ?", + "Are you sure you want to detach the selected resources?": "Êtes-vous sûr de vouloir détacher les ressources sélectionnées ?", + "Are you sure you want to force delete this resource?": "Êtes-vous sûr de vouloir forcer la suppression de cette ressource ?", + "Are you sure you want to force delete the selected resources?": "Êtes-vous sûr de vouloir forcer la suppression des ressources sélectionnées ?", + "Are you sure you want to restore this resource?": "Êtes-vous sûr de vouloir restaurer cette ressource ?", + "Are you sure you want to restore the selected resources?": "Êtes-vous sûr de vouloir restaurer les ressources sélectionnées ?", + "Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Un autre utilisateur a mis à jour cette ressource depuis que vous avez commencé à la modifier. Veuillez actualiser la page.", + "Are you sure you want to delete this file?": "Êtes-vous sûr de vouloir supprimer ce fichier ?", + "Are you sure you want to run this action?": "Êtes-vous sûr que vouloir exécuter cette action ?", + "Click to choose": "Cliquez pour choisir", + "Please select a resource to perform this action on.": "Veuillez sélectionner une ressource sur laquelle cette action sera exécutée.", + "Choose File": "Choisissez un fichier", + "Choose Type": "Choisissez le type", + "Choose an option": "Choisissez une option", + "The action ran successfully!": "L’action s’est déroulée avec succès.", + "The government won't let us show you what's behind these doors": "Vous n’êtes pas autorisé à voir cette page", + "We're lost in space. The page you were trying to view does not exist.": "La page demandée n’existe pas.", + "Whoops": "Données invalides", + "Whoops!": "Page introuvable", + "Choose date": "Choisissez une date", + "The :resource was updated!": "La ressource :resource a été enregistrée.", + "The resource was updated!": "La ressource a été enregistrée.", + "The :resource was deleted!": "La ressource :resource a été supprimée.", + "The :resource was restored!": "La ressource :resource a été restaurée.", + "Sorry, your session has expired.": "Désolé, votre session a expiré." +} From 7d396be0172a6f610f6bd4d639707d085771bcd4 Mon Sep 17 00:00:00 2001 From: Kit Burton-Senior Date: Thu, 5 Mar 2020 16:26:25 +0000 Subject: [PATCH 2/2] add --formal option to publish --- src/Commands/NovaLangPublish.php | 79 ++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/src/Commands/NovaLangPublish.php b/src/Commands/NovaLangPublish.php index e98f3a5..b1e8791 100644 --- a/src/Commands/NovaLangPublish.php +++ b/src/Commands/NovaLangPublish.php @@ -25,6 +25,7 @@ class NovaLangPublish extends Command {--all : Publish all languages} {--alias= : Publish files using a different filename for certain locales, in the format "locale:alias,..."} {--U|underscore : Use underscore instead of dash as locale separator } + {--formal= : Publish the formal variants of certain locales, comma-separated} {--force : Override existing files}'; /** @@ -58,16 +59,23 @@ public function __construct(Filesystem $filesystem) */ public function handle() { + if ($this->isFormalLocale($this->argument('locales')) || $this->isFormalLocale($this->option('alias'))) { + $this->error('You must not specify the @formal suffix in the locales argument or --alias option.'); + return; + } + $availableLocales = $this->getAvailableLocales(); $requestedLocales = $this->getRequestedLocales(); + $formalLocales = $this->getFormalLocales(); + if (!$requestedLocales->count()) { $this->error('You must either specify one or more locales, or use the --all option.'); return; } - $requestedLocales->each(function (string $alias, string $locale) use ($availableLocales) { + $requestedLocales->each(function (string $alias, string $locale) use ($availableLocales, $formalLocales) { if ($alias == 'en' && $this->isForce()) { if (!$this->confirm(sprintf('Are you sure you want to publish translations for [en] locale? This will overwrite the file from laravel/nova.'))) { @@ -113,6 +121,23 @@ public function handle() $this->filesystem->copy($inputFile, $outputFile); + if ($formalLocales->contains($locale)) { + $inputFileFormal = $inputDirectory . '@formal.json'; + + if ($this->filesystem->exists($inputFileFormal)) { + $formalKeys = json_decode($this->filesystem->get($inputFileFormal), true); + $informalKeys = json_decode($this->filesystem->get($inputFile), true); + + $outputKeys = array_merge($informalKeys, $formalKeys); + + $this->filesystem->put($outputFile, json_encode($outputKeys, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + + return $this->info(sprintf('Formal translations for [%s] locale have been published successfully.', $locale, $asAlias)); + } + + $this->warn(sprintf('There is no formal variant for [%s] locale. The ordinary translation file will be published instead.', $locale, $asAlias)); + } + $this->info(sprintf('Translations for [%s] locale have been published successfully%s.', $locale, $asAlias)); }); } @@ -122,10 +147,13 @@ protected function getRequestedLocales(): Collection if ($this->isAll()) { $locales = $this->getAvailableLocales(); } - else { + elseif ($this->argument('locales')) { $locales = $this->fixSeparators($this->argument('locales')); $locales = collect(explode(',', $locales))->filter(); } + else { + return collect(); + } $aliases = $this->getLocaleAliases($locales->count() == 1 ? $locales->first() : false); @@ -146,6 +174,22 @@ protected function getRequestedLocales(): Collection return $locales; } + protected function getFormalLocales(): Collection + { + if (!$this->option('formal')) { + return collect(); + } + + if ($this->isAllFormal()) { + $locales = $this->getAvailableFormalLocales(); + } else { + $locales = $this->fixSeparators($this->option('formal')); + $locales = collect(explode(',', $locales))->filter(); + } + + return $locales; + } + protected function getAvailableLocales(): Collection { $localesByDirectories = collect($this->filesystem->directories($this->directoryFrom())) @@ -156,11 +200,25 @@ protected function getAvailableLocales(): Collection $localesByFiles = collect($this->filesystem->files($this->directoryFrom())) ->map(function (SplFileInfo $splFileInfo) { return str_replace('.'.$splFileInfo->getExtension(), '', $splFileInfo->getFilename()); + })->filter(function ($locale) { + return !$this->isFormalLocale($locale); }); return $localesByDirectories->intersect($localesByFiles)->values(); } + protected function getAvailableFormalLocales(): Collection + { + return collect($this->filesystem->files($this->directoryFrom())) + ->map(function (SplFileInfo $splFileInfo) { + return str_replace('.'.$splFileInfo->getExtension(), '', $splFileInfo->getFilename()); + })->filter(function ($locale) { + return $this->isFormalLocale($locale); + })->map(function ($locale) { + return $this->stripFormalLocale($locale); + })->values(); + } + protected function getLocaleAliases($single = false): Collection { $aliases = collect(); @@ -211,11 +269,21 @@ protected function getLocaleAliases($single = false): Collection return $aliases; } - protected function fixSeparators(string $locale, string $separator = '-') + protected function fixSeparators(?string $locale, string $separator = '-'): string { return preg_replace('/['.static::SEPARATORS.']+/', $separator, $locale); } + public function isFormalLocale(?string $locale): bool + { + return stripos($locale, '@formal') !== false; + } + + public function stripFormalLocale(?string $locale): string + { + return str_replace('@formal', '', $locale); + } + protected function isForce(): bool { return $this->option('force'); @@ -226,6 +294,11 @@ protected function isAll(): bool return $this->option('all'); } + protected function isAllFormal(): bool + { + return $this->option('formal') == '*'; + } + protected function directoryFrom(): string { return base_path('vendor/coderello/laravel-nova-lang/resources/lang');

AltStyle によって変換されたページ (->オリジナル) /