puzzle/decidim-zuerich

Sprachfile: YML File aufräumen & hochladen

Closed this issue · 16 comments

DE_YML ersetzen.

@Kagemaru kannst du noch den Rake-Task für die fehlenden Begriffen durchführen? Danke!

Hey Lars
Hier die Resultate der Rake Tasks:

Task: > ENFORCED_LOCALES=en,de i18n-tasks missing --locales en,de
Resultat: i18n-missing-keys.txt

Task: > i18n-tasks unused --locales en,de
Resultat: i18n-unused-keys.txt

Task: > i18n-tasks check-consistent-interpolations --locales en,de
Resultat: ✓ Well done! No inconsistent interpolations found.

Anbei noch die Dokumentation für die Rake-Tasks:
https://github.com/glebm/i18n-tasks

Perfekt, danke dir!

Zum Verständnis: Keys, die in beiden Files (unused und unübersetzt) vorkommen, kann ich ignorieren, oder?

Bzw. wo kommen diese Keys eigentlich vor, die unused sind?

@Kagemaru Abklärung, wie die erkannten Translationkeys exportiert werden können

@Kagemaru wir hatten im Zürcher Sprachfile die devise-Keys auf unterschiedlichen Ebenen (z.b. de.devise, de.activerecord.devise und de.decidim.devise, wie auch de.decidim_zuerich.devise). Gemäss dem Rake-Task sind alle Klassen ausser de.decidim.devise ungebraucht und können demnach gelöscht werden, oder? Oder braucht es die de.decidim_zuerich.devise-Keys auch noch?

In Luzern/decidim.swiss gibts noch die Klassen decidim_ocl.devise.TENANTNAME.devise

Hey Lars
Ein Teil der Translation Keys kommen direkt aus Devise oder auch aus Decidim. Diese können sich mit der Zeit auch geändert haben. Das war mitunter auch der Grund, warum TermCustomizer Probleme hatte diese zu überschreiben.

Keys von Decidim sind schwierig zentral darzustellen, da alles in Module aufgeteilt ist.
Für die aktuelle Version im develop Branch sieht man die Anpassungen hier:
https://github.com/search?q=repo%3Adecidim%2Fdecidim+path%3Ade.yml+devise&type=code

Den einzigen Weg, den ich kenne um alle Keys von Devise zu bekommen, die momentan möglich sind, ist von unserem Codestand aus alle files mit einem devise key auszulesen:
devise-translation-keys.zip

Die de Keys von Devise sieht man hier:

# Devise config/locales/devise.views.de.yml
de:
  activerecord:
    attributes:
      user:
        confirmation_sent_at: Bestätigung gesendet am
        confirmation_token: Bestätigungs-Token
        confirmed_at: Bestätigt am
        created_at: Erstellt am
        current_password: Bisheriges Passwort
        current_sign_in_at: Aktuelle Anmeldung am
        current_sign_in_ip: IP der aktuellen Anmeldung
        email: E-Mail
        encrypted_password: Verschlüsseltes Passwort
        failed_attempts: Fehlversuche
        last_sign_in_at: Letzte Anmeldung am
        last_sign_in_ip: IP der letzten Anmeldung
        locked_at: Gesperrt am
        password: Passwort
        password_confirmation: Passwortbestätigung
        remember_created_at: '"Angemeldet bleiben" erstellt am'
        remember_me: Angemeldet bleiben
        reset_password_sent_at: E-Mail zum Zurücksetzen des Passworts gesendet am
        reset_password_token: Token zum Zurücksetzen des Passworts
        sign_in_count: Anzahl der Anmeldungen
        unconfirmed_email: Unbestätigte E-Mail-Adresse
        unlock_token: Entsperrungs-Token
        updated_at: Aktualisiert am
    models:
      user:
        one: Benutzer
        other: Benutzer
  devise:
    confirmations:
      confirmed: Ihre E-Mail-Adresse wurde erfolgreich bestätigt.
      new:
        resend_confirmation_instructions: Bestätigungsanleitung erneut senden
      send_instructions: In wenigen Minuten erhalten Sie eine E-Mail zur Bestätigung Ihrer Registrierung.
      send_paranoid_instructions: Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in wenigen Minuten eine E-Mail zur Bestätigung Ihrer Registrierung.
    failure:
      already_authenticated: Sie sind bereits angemeldet.
      inactive: Ihr Konto ist noch nicht aktiv.
      invalid: "%{authentication_keys} oder Passwort ist ungültig."
      last_attempt: Sie haben noch einen Versuch, bevor Ihr Konto gesperrt wird.
      locked: Ihr Konto ist gesperrt.
      not_found_in_database: "%{authentication_keys} oder Passwort ist ungültig."
      timeout: Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.
      unauthenticated: Sie müssen sich anmelden oder registrieren, um fortzufahren.
      unconfirmed: Sie müssen Ihr Konto bestätigen, bevor Sie fortfahren können.
    mailer:
      confirmation_instructions:
        action: Mein Konto bestätigen
        greeting: Willkommen %{recipient}!
        instruction: 'Klicken Sie auf den folgenden Link, um Ihr Konto zu bestätigen:'
        subject: Anleitung zur Konto-Bestätigung
      email_changed:
        greeting: Hallo %{recipient}!
        message: Wir möchten Sie informieren, dass Ihre E-Mail-Adresse zu %{email} geändert wurde.
        message_unconfirmed: Wir möchten Sie informieren, dass Ihre E-Mail-Adresse zu %{email} geändert wird.
        subject: E-Mail-Adresse geändert
      password_change:
        greeting: Hallo %{recipient}!
        message: Wir möchten Sie darüber informieren, dass Ihr Passwort geändert wurde.
        subject: Passwortänderung
      reset_password_instructions:
        action: Passwort ändern
        greeting: Hallo %{recipient}!
        instruction: Jemand hat einen Link zum Ändern Ihres Passworts angefordert. Klicken Sie auf den folgenden Link, um Ihr Passwort zu ändern.
        instruction_2: Ignorieren Sie diese E-Mail, wenn Sie kein neues Passwort angefordert haben.
        instruction_3: Ihr Passwort wird erst geändert, wenn Sie den obigen Link nutzen und ein neues Passwort festlegen.
        subject: Anweisungen zum Zurücksetzen Ihres Passworts
      unlock_instructions:
        action: Mein Konto entsperren
        greeting: Hallo %{recipient}!
        instruction: 'Klicken Sie auf den folgenden Link, um Ihr Konto zu entsperren:'
        message: Aufgrund zahlreicher fehlgeschlagener Anmeldeversuche wurde Ihr Konto gesperrt.
        subject: Anweisungen zur Entsperrung Ihres Kontos
    omniauth_callbacks:
      failure: 'Die Anmeldung mit Ihrem %{kind}-Konto war aufgrund des folgenden Grundes nicht möglich: "%{reason}".'
      success: Sie haben sich erfolgreich über Ihr %{kind}-Konto angemeldet.
    passwords:
      edit:
        change_my_password: Mein Passwort ändern
        change_your_password: Ihr Passwort ändern
        confirm_new_password: Neues Passwort bestätigen
        new_password: Neues Passwort
      new:
        forgot_your_password: Haben Sie Ihr Passwort vergessen?
        send_me_reset_password_instructions: Anweisungen zum Zurücksetzen meines Passworts senden
      no_token: Sie können diese Seite nicht nutzen, es sei denn, Sie stammen von einer Passwort-Zurücksetzen-E-Mail. Wenn dies der Fall ist, stellen Sie sicher, dass Sie die vollständige URL verwendet haben.
      send_instructions: Sie erhalten in Kürze eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts.
      send_paranoid_instructions: Wenn Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in Kürze eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts.
      updated: Ihr Passwort wurde geändert. Sie sind jetzt angemeldet.
      updated_not_active: Ihr Passwort wurde erfolgreich geändert.
    registrations:
      destroyed: Ihr Konto wurde gelöscht. Wir hoffen, Sie bald wiederzusehen.
      edit:
        are_you_sure: Sind Sie sicher, dass Sie das tun möchten?
        cancel_my_account: Konto löschen
        currently_waiting_confirmation_for_email: Bestätigung für %{email} ausstehend.
        leave_blank_if_you_don_t_want_to_change_it: Leer lassen, wenn Sie es unverändert lassen möchten.
        title: "%{resource} bearbeiten"
        unhappy: Nicht zufrieden?
        update: Änderungen speichern
        we_need_your_current_password_to_confirm_your_changes: Zur Bestätigung geben Sie bitte Ihr aktuelles Passwort ein.
      new:
        sign_up: Registrieren
      signed_up: Sie haben sich erfolgreich registriert.
      signed_up_but_inactive: Ihre Registrierung war erfolgreich, Ihr Konto ist jedoch noch nicht aktiviert.
      signed_up_but_locked: Ihre Registierung war erfolgreich, Ihr Konto ist jedoch gesperrt.
      signed_up_but_unconfirmed: Sie erhalten in Kürze eine Bestätigungs-E-Mail. Bitte klicken Sie auf den darin enthaltenen Link, um Ihr Konto zu aktivieren.
      update_needs_confirmation: Sie haben Ihre Daten aktualisiert. Eine Bestätigungs-E-Mail wird Ihnen zugesandt. Bitte klicken Sie auf den Link in der E-Mail, um Ihre Änderungen zu bestätigen.
      updated: Ihre Einstellungen wurden aktualisiert.
      updated_but_not_signed_in: Sie haben Ihre Daten aktualisiert, aber Sie müssen sich wegen einer Passwortänderung erneut anmelden.
    sessions:
      already_signed_out: Sie sind bereits abgemeldet.
      new:
        sign_in: Anmelden
      signed_in: Sie sind nun angemeldet.
      signed_out: Sie haben sich erfolgreich abgemeldet.
    shared:
      links:
        back: Zurück
        didn_t_receive_confirmation_instructions: Keine Bestätigungs-E-Mail erhalten?
        didn_t_receive_unlock_instructions: Keine Anweisungen zum Entsperren erhalten?
        forgot_your_password: Passwort vergessen?
        sign_in: Anmelden
        sign_in_with_provider: Mit %{provider} anmelden
        sign_up: Registrieren
      minimum_password_length:
        one: "(mindestens %{count} Zeichen)"
        other: "(mindestens %{count} Zeichen)"
    unlocks:
      new:
        resend_unlock_instructions: Anweisungen zum Entsperren erneut senden
      send_instructions: Sie erhalten in Kürze eine E-Mail mit Anweisungen, wie Sie Ihr Konto entsperren können.
      send_paranoid_instructions: Wenn Ihre E-Mail-Adresse in unserer Datenbank verzeichnet ist, erhalten Sie Anweisungen zur Entsperrung Ihres Kontos.
      unlocked: Ihr Konto wurde entsperrt. Bitte melden Sie sich jetzt an.
  errors:
    messages:
      already_confirmed: Bereits bestätigt. Versuchen Sie, sich anzumelden.
      confirmation_period_expired: Die Bestätigungsfrist von %{period} ist abgelaufen. Bitte erneut anfordern.
      expired: Der Link ist abgelaufen. Bitte erneut anfordern.
      not_found: Nicht gefunden.
      not_locked: Nicht gesperrt.
      not_saved:
        one: "%{resource} konnte wegen eines Fehlers nicht gespeichert werden:"
        other: "%{count} Fehler verhinderten das Speichern von %{resource}:"

Danke @Kagemaru ! @innosmith (zur Info): Ich bin alle devise Keys im Sprachfile von Zürich mal durchgegangen und habe sie mit Crowdin abgeglichen. Somit sind die Sprachfiles auf Crowdin in einem akzeptablen Format und somit besteht auch kein Bedarf mehr, devise Keys im lokalen Sprachfile aufzuführen. Dies wird nur noch notwendig sein, sollten Tenants Abweichungen von Crowdin wünschen (oder bis der Term Customizer Fix da ist -> gemäss Tickets ist der Branch noch ein Draft, aber wurde bereits praktisch erprobt).

Somit ergibt sich nun folgendes Deutsches Sprachfile:

# Files in the config/locales directory are used for internationalization
# and are automatically loaded by Rails. If you want to use locales other
# than English, add the necessary files in this directory.
#
# To use the locales, use `I18n.t`:
#
#     I18n.t 'hello'
#
# In views, this is aliased to just `t`:
#
#     <%= t('hello') %>
#
# To use a different locale, set it with `I18n.locale`:
#
#     I18n.locale = :es
#
# This would use the information in config/locales/es.yml.
#
# The following keys must be escaped otherwise they will not be retrieved by
# the default I18n backend:
#
# true, false, on, off, yes, no
#
# Instead, surround them with single quotes.
#
# en:
#   'true': 'foo'
#
# To learn more, please read the Rails Internationalization guide
# available at http://guides.rubyonrails.org/i18n.html.

de:
  activemodel:
    attributes:
      organization:
        delete_admin_logs: Löschen von Admin-Protokollen zulassen
        delete_admin_logs_after: Admin-Protokolle löschen nach (Tage, standardmässig 365)
        delete_inactive_users: Inaktive Teilnehmende löschen
        delete_inactive_users_after: Inaktive Teilnehmende löschen nach (Tage, standardmässig 390)
        delete_inactive_users_email_after: E-Mail zur bevorstehenden Konto-Löschung versenden nach Inaktivität von (Tagen, standardmässig 365)
    errors:
      internal_server_error:
        try_later: Bitte versuchen Sie es später nochmal.
      not_found:
        content_doesnt_exist: Diese Seite wurde leider nicht gefunden. Wir bitten um Verständnis.
        title: Ups!
   decidim:
    admin:
      menu:
        clean: Datenbereinigung
    cleaner:
      admin:
        organization_cleaner:
          edit:
            update: Aktualisieren
          form:
            admin_log_cleaner_title: Admin-Log
            inactive_users_cleaner_title: Inaktive Teilnehmende
      inactive_users_mailer:
        warning_deletion:
          body_1: Sie sind seit %{Tagen} Tagen bei <a href="%{Organisation_url}"> %{Organisation_name} </a> inaktiv.
          body_2: Infolgedessen wurde Ihr Konto gelöscht.
          greetings: Freundliche Grüsse,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
          hello: Guten Tag
          subject: Ihr Konto wurde gelöscht.
        warning_inactive:
          body_1: Sie sind seit %{Tagen} Tagen bei %{Organisation_name} inaktiv.
          body_2: <a href="%{organization_url}">Wenn Sie sich nicht innerhalb %{remaining_days} Tagen anmelden </a>, wird ihr Konto gelöscht.
          greetings: Freundliche Grüsse,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
          hello: Guten Tag
          subject: Ihr Konto ist inaktiv
    components:
      cleaner:
        name: Bereinigung
    content_blocks:
      last_blog_posts:
        name: Aktuellste Blog-Einträge
        title: Aktuellste Blog-Einträge
        view_all: Alle anzeigen
      html2:
        name: HTML-Block 2
      html3:
        name: HTML-Block 3
      html4:
        name: HTML-Block 4
    participatory_processes:
      index:
        participatory_process_group:
          more_info: Mehr anzeigen
    system:
      models:
        organization:
          fields:
            tenant_type: special features
      organizations:
        tenant_type:
          none: None
        omniauth_settings:
          oidc:
            issuer: Issuer URL (e.g. https://login.integ.stadt-zuerich.ch:443/login/op)
            client_id: Client ID
            client_secret: Client secret
            redirect_url: Redirect URL (e.g. https://my.decidim.domain/users/auth/oidc/callback)
  decidim_zuerich:
    devise:
      # mitwirken: null
      # meinquartier: null
    maps:
      gis_zh:
        basiskarte_schraeg: Stadt Zürich Basiskarte
        orthofoto: Stadt Zürich Luftbild
    participatory_processes:
      participatory_process_helper:
        step_dates:
          no_dates: Kein Datum angegeben
    surveys:
      survey_answered_mailer:
        answered:
          answered_survey: Jemand hat an der Umfrage "%{survey_name}" teilgenommen.
          subject: Neue Antwort zur Umfrage "%{survey_name}"
          view: Zur Umfrage
    verifications:
      sms:
        aspsms_gateway:
          sms_text: '%{code} ist Ihr Zugangscode auf %{organization}'
          sms_originator_max_11_alphabetic_characters: DECIDIM
    reply_to: mitwirken-kontakt@zuerich.ch
  devise:
    shared:
      links:
        sign_in_with_provider: Mit "Mein Konto" anmelden
  hello: "Hello world"

@larsUE , @Kagemaru : können wir somit das bereinigte YML-File aus Zürich auf die Test-Umgebung der decidim.swiss Plattform übertragen? Falls ja, per wann ist dies möglich; auch damit wir die Kund:innenseite informieren können?

@innosmith Da hat es jetzt halt noch einiges Zürich spezifisches drauf. Für Decidim-Swiss müssten folgende Dinge angepasst werden:

  1. Alle Cleaner-Begriffe raus (decidim.components.cleaner & decidim.admin.menu.clean) -> Dieses Modul ist auf decidim.swiss m.E. nicht installiert
  2. Aus dem bestehenden decidim.swiss-Sprachfile Tenant-spezifische Übersetzungen übernehmen (also alle Keys unter decidim_ocl) und Keys von decidim_zuerich ersetzen -> Hier sind noch devise-Übersetzungen drin, die je nachdem Duplikate sein könnten (zumindest die in "Sie"-Form), sicherheitshalber würde ich die aber mal übernehmen.
  3. Bestehendes Sprachfile auf Github ersetzen

@innosmith Hättest du gerade Kapa, dies für decidim.swiss zu machen?
@Kagemaru sollen wir die Begriffe direkt via Guthub hochladen oder möchtest du sie nochmals sortieren?

Ich sortiere sie gerne nochmal und packe sie dann rein.

@Kagemaru , @larsUE
Siehe Anhang habe ich basierend auf dem Zürcher YML oben im Ticket eine Version für die decidim.swiss Plattform erstellt. Dabei habe ich folgende Änderungen gemacht:

  1. Den Knoten "decidim_ocl" aus dem alten YML übernommen und analog der neuen Version für "decidim_zuerich" gekürzt. Alles andere habe ich NICHT übernommen.
  2. Die Cleaner-Übersetzungen habe ich 1:1 übernommen; wer weiss, wann andere dieses Feature auch benötigen.
  3. Im "decidim" Knoten habe ich "omniauth_settings" aus Zürich mit der MeinKonto-Anbindung ersetzt durch die Settings von decidim.swiss mit "enabled: Omniauth aktiviert".
  4. Die "captcha" Übersetzungen habe ich NICHT übernommen, da im Zürcher-YML nicht vorhanden.

Bitte prüfen und wenn in Ordnung, auf decidim.swiss INT ausrollen, um es zu testen. Gerne helfe ich mit beim Testen. PROD unbedingt noch nichts verändern.
ocl_yml_cleaned.txt

@Kagemaru Du hast sie noch nicht auf INT gepackt, oder?

Hoi @larsUE : siehe https://github.com/orgs/decidim-swiss/projects/4?pane=issue&itemId=62031748 ist das überarbeitete Sprachfile auf decidim.swiss INT eingespielt.

Danke @innosmith ! Yes, das habe ich gesehen. Frage aber für die Zürcher Umgebung nach, da wurde das File seit 2 Monaten nicht mehr aktualisiert.

@Kagemaru wird das am Mi, 29.5. erledigen (PROD & INT)