diff options
| author | Jonas Kohl | 2024-09-16 11:31:53 +0200 | 
|---|---|---|
| committer | Jonas Kohl | 2024-09-16 11:31:53 +0200 | 
| commit | 38f03c375eafdb6b95190729479c6fa0d721b400 (patch) | |
| tree | 637616799ed5e20c72d8d7be7a78e72a11826cfa /src | |
| parent | cb9b87997993702131ca24d4d0e1fd45ef64805c (diff) | |
More i18n
Diffstat (limited to 'src')
| -rw-r--r-- | src/application/i18n.php | 14 | ||||
| -rw-r--r-- | src/application/messages/de.msg | 145 | ||||
| -rw-r--r-- | src/application/views/form_addpost.php | 11 | ||||
| -rw-r--r-- | src/application/views/form_login.php | 11 | ||||
| -rw-r--r-- | src/application/views/form_newtopic.php | 13 | ||||
| -rw-r--r-- | src/application/views/form_register.php | 23 | ||||
| -rw-r--r-- | src/application/views/nav_logged_in.php | 9 | ||||
| -rw-r--r-- | src/application/views/view_post.php | 20 | ||||
| -rw-r--r-- | src/application/views/view_topic_start.php | 43 | ||||
| -rw-r--r-- | src/application/views/view_topics.php | 2 | ||||
| -rw-r--r-- | src/application/views/view_user.php | 49 | 
11 files changed, 249 insertions, 91 deletions
| diff --git a/src/application/i18n.php b/src/application/i18n.php index 964439f..2fcadab 100644 --- a/src/application/i18n.php +++ b/src/application/i18n.php @@ -6,8 +6,10 @@ $__i18n_msg_store = [];  $__i18n_current_locale = null;  function i18n_parse(string $contents, ?string $filename = null): array { -    $syntax_error = fn(string $msg, ?int $line = null): never => -        throw new Exception("i18n syntax error: $msg (in " . ($filename ?? "unknown") . ":" . ($line ?? 0) . ")"); +    $syntax_error = fn(string $msg, int $line): never => +        throw new Exception("i18n syntax error: $msg (in " . ($filename ?? "unknown") . ":" . $line . ")"); +    $other_error = fn(string $msg, int $line): never => +        throw new Exception("i18n error: $msg (in " . ($filename ?? "unknown") . ":" . $line . ")");      $msgs = [];      $lines = explode("\n", $contents); @@ -27,7 +29,9 @@ function i18n_parse(string $contents, ?string $filename = null): array {                  if ($currentId !== "") {                      if ($currentContext !== "")                          $currentId = $currentContext . "\004" . $currentId; -                    $msgs[$currentId] ??= $currentMessage; +                    if (isset($msgs[$currentId])) +                        $other_error("duplicate message id '$currentId'", $lnNum); +                    $msgs[$currentId] = $currentMessage;                  }                  $currentId = json_decode(substr($ln, 2));                  $currentContext = ""; @@ -58,7 +62,9 @@ function i18n_parse(string $contents, ?string $filename = null): array {      if ($currentId !== "") {          if ($currentContext !== "")              $currentId = $currentContext . "\x7F" . $currentId; -        $msgs[$currentId] ??= $currentMessage; +        if (isset($msgs[$currentId])) +            $other_error("duplicate message id '$currentId'", count($lines)); +        $msgs[$currentId] = $currentMessage;      }      return $msgs;  } diff --git a/src/application/messages/de.msg b/src/application/messages/de.msg index 5ee2f6c..692e559 100644 --- a/src/application/messages/de.msg +++ b/src/application/messages/de.msg @@ -115,3 +115,148 @@  : "Delete post"  = "Beitrag löschen" + +: "Username:" += "Nutzername:" + +: "Display name:" += "Anzeigename:" + +: "Choose password:" += "Passwort festlegen:" + +: "Repeat password:" += "Passwort wiederholen:" + +: "Email address:" += "E-Mail-Adresse:" + +: "CAPTCHA:" += "CAPTCHA:" + +: "New CAPTCHA" += "Neues CAPTCHA" + +: "Register now" += "Jetzt registrieren" + +: "Already have an account? %link%Sign in now%/link%" += "Sie haben bereits ein Nutzerkonto? %link%Jetzt anmelden%/link%" + +: "Don't have an account? %link%Register now%/link%" += "Sie haben noch kein Nutzerkonto? %link%Jetzt registrieren%/link%" + +: "Edit post" += "Beitrag bearbeiten" + +: "Message:" += "Nachricht:" + +: "Cancel" += "Abbrechen" + +: "Save changes" += "Änderungen speichern" + +: "Permission denied" += "Zugriff verweigert" + +: "Close" += "Schließen" + +: "Edit title" += "Titel ändern" + +: "Reply" += "Antworten" + +: "Delete topic" += "Thema löschen" + +: "(deleted)" += "(gelöscht)" + +: "Started by %user% on %date%" += "Gestartet von %user% am %date%" + +: "Welcome, %user%!" += "Willkommen, %user%!" + +: "This post has been deleted" += "Dieser Beitrag wurde gelöscht" + +: "Profile picture" += "Profilbild" + +: "Permalink" += "Permalink" + +: "Reply to post" += "Auf Beitrag antworten" + +: "(edited)" += "(bearbeitet)" + +: "You" += "Sie" + +: "Reply to this topic" += "Auf dieses Thema antworten" + +: "Attachments: <small>(max. %max_attachment_count% files, max. %max_attachment_size% MiB each)</small>" += "Anhänge: <small>(max. %max_attachment_count% Dateien, je max. %max_attachment_size% MiB)</small>" + +: "Post reply" += "Antwort veröffentlichen" + +: "Topic title:" += "Titel des Themas:" + +: "Create topic" += "Thema erstellen" + +: "Member since %join_date%" += "Mitglied seit %join_date%" + +: "Your posts" += "Ihre Beiträge" + +: "%display_name%'s posts" += "Beiträge von %display_name%" + +: "unknown" += "unbekannt" + +: "posted on %post_date% in %topic%" += "veröffentlicht am %post_date% in %topic%" + +: "Show all posts" += "Alle Beiträge anzeigen" + +: "This user has not posted anything yet" += "Dieser Nutzer hat noch nichts veröffentlicht" + +: "Edit profile" += "Profil bearbeiten" + +: "Profile picture:" += "Profilbild:" + +: "Keep current profile picture" += "Aktuelles Profilbild behalten" + +: "No profile picture" += "Kein Profilbild" + +: "Remove profile picture" += "Profilbild entfernen" + +: "Upload new profile picture" += "Neues Profilbild hochladen" + + +#:: +#- "Select file" +#- "Select files" +#= "Datei auswählen" +#- "Dateien auswählen" diff --git a/src/application/views/form_addpost.php b/src/application/views/form_addpost.php index 88648b4..72dafe5 100644 --- a/src/application/views/form_addpost.php +++ b/src/application/views/form_addpost.php @@ -8,7 +8,7 @@ if ($lastFormUri !== $_SERVER["REQUEST_URI"]) $lastForm = [];  RequestUtils::clearLastForm();  ?> -<h3 id="form">Reply to this topic</h3> +<h3 id="form"><?= __("Reply to this topic") ?></h3>  <?php  if (($_formError = RequestUtils::getAndClearFormError()) !== null) {      _view("alert_error", ["message" => $_formError]); @@ -16,12 +16,15 @@ if (($_formError = RequestUtils::getAndClearFormError()) !== null) {  ?>  <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>#form" method="post" enctype="multipart/form-data">  <div class="form-group"> -    <label for="i_message">Message:</label> +    <label for="i_message"><?= __("Message:") ?></label>      <textarea class="form-control" id="i_message" name="message" required rows="12" cols="60" style="resize:vertical;max-height:499px"></textarea>  </div>  <div class="form-group"> -    <label for="i_files">Attachments: <small>(max. <?= htmlentities(MAX_ATTACHMENT_COUNT) ?> files, max. <?= htmlentities(MAX_ATTACHMENT_SIZE >> 20) ?> MiB each)</small></label> +    <label for="i_files"><?= __("Attachments: <small>(max. %max_attachment_count% files, max. %max_attachment_size% MiB each)</small>", [ +        "max_attachment_count" => strval(MAX_ATTACHMENT_COUNT), +        "max_attachment_size" => strval(MAX_ATTACHMENT_SIZE >> 20) +    ]) ?></label>      <input type="file" name="files[]" id="i_files" multiple accept="*/*">  </div> -<button type="submit" class="btn btn-success">Post reply</button> +<button type="submit" class="btn btn-success"><?= __("Post reply") ?></button>  </form> diff --git a/src/application/views/form_login.php b/src/application/views/form_login.php index de8f28c..1ae20a9 100644 --- a/src/application/views/form_login.php +++ b/src/application/views/form_login.php @@ -21,21 +21,24 @@ if (($_formError = RequestUtils::getAndClearFormError()) !== null) {  ?>  <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>" method="post">  <div class="form-group"> -    <label for="i_username">Username:</label> +    <label for="i_username"><?= __("Username:") ?></label>      <input class="form-control" type="text" id="i_username" name="username" value="<?= htmlentities($lastForm["username"] ?? "") ?>" required autofocus>  </div>  <div class="form-group"> -    <label for="i_password">Password:</label> +    <label for="i_password"><?= __("Password:") ?></label>      <input class="form-control" type="password" id="i_password" name="password" required>  </div>  <div class="form-group"> -    <button class="btn btn-default" type="submit">Log in</button> +    <button class="btn btn-default" type="submit"><?= __("Log in") ?></button>  </div>  <div class="form-group"> -    Don't have an account? <a href="?_action=register">Register now</a> +    <?= __("Don't have an account? %link%Register now%/link%", [ +        "link" => '<a href="?_action=register">', +        "/link" => '</a>', +    ]) ?>  </div>  </form>  </div> diff --git a/src/application/views/form_newtopic.php b/src/application/views/form_newtopic.php index 2e58268..a40f3a6 100644 --- a/src/application/views/form_newtopic.php +++ b/src/application/views/form_newtopic.php @@ -10,7 +10,7 @@ RequestUtils::clearLastForm();  ?>  <div class="page-header margin-top-0"> -    <h1>New topic</h1> +    <h1><?= __("New topic") ?></h1>  </div>  <?php  if (($_formError = RequestUtils::getAndClearFormError()) !== null) { @@ -19,16 +19,19 @@ if (($_formError = RequestUtils::getAndClearFormError()) !== null) {  ?>  <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>#form" method="post" enctype="multipart/form-data">  <div class="form-group"> -    <label for="i_message">Topic title:</label> +    <label for="i_message"><?= __("Topic title:") ?></label>      <input type="text" class="form-control" id="i_title" name="title" value="<?= htmlentities($lastForm["title"] ?? "") ?>" required autofocus>  </div>  <div class="form-group"> -    <label for="i_message">Message:</label> +    <label for="i_message"><?= __("Message:") ?></label>      <textarea class="form-control" id="i_message" name="message" required rows="12" cols="60" style="resize:vertical;max-height:499px"><?= htmlentities($lastForm["message"] ?? "") ?></textarea>  </div>  <div class="form-group"> -    <label for="i_files">Attachments: <small>(max. <?= htmlentities(MAX_ATTACHMENT_COUNT) ?> files, max. <?= htmlentities(MAX_ATTACHMENT_SIZE >> 20) ?> MiB each)</small></label> +    <label for="i_files"><?= __("Attachments: <small>(max. %max_attachment_count% files, max. %max_attachment_size% MiB each)</small>", [ +        "max_attachment_count" => strval(MAX_ATTACHMENT_COUNT), +        "max_attachment_size" => strval(MAX_ATTACHMENT_SIZE >> 20) +    ]) ?></label>      <input type="file" name="files[]" id="i_files" multiple accept="*/*">  </div> -<button type="submit" class="btn btn-success">Create topic</button> +<button type="submit" class="btn btn-success"><?= __("Create topic") ?></button>  </form> diff --git a/src/application/views/form_register.php b/src/application/views/form_register.php index 83f3f4e..a37e5c3 100644 --- a/src/application/views/form_register.php +++ b/src/application/views/form_register.php @@ -21,54 +21,57 @@ if (($_formError = RequestUtils::getAndClearFormError()) !== null) {  ?>  <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>" method="post">  <div class="form-group" id="group0"> -    <label for="i_username">Username:</label> +    <label for="i_username"><?= __("Username:") ?></label>      <input class="form-control" id="i_username" type="text" name="username" value="" required>  </div>  <div class="form-group" id="group1"> -    <label for="i_username">Username:</label> +    <label for="i_username"><?= __("Username:") ?></label>      <input class="form-control" id="i_username" type="text" name="df82a9bc21" value="<?= htmlentities($lastForm["username"] ?? "") ?>" required>  </div>  <div class="form-group" id="group2"> -    <label for="i_display_name">Display name:</label> +    <label for="i_display_name"><?= __("Display name:") ?></label>      <input class="form-control" id="i_display_name" type="text" name="display_name" value="<?= htmlentities($lastForm["display_name"] ?? "") ?>" required>  </div>  <div class="form-group" id="group3"> -    <label for="i_password">Choose password:</label> +    <label for="i_password"><?= __("Choose password:") ?></label>      <input class="form-control" id="i_password" type="password" name="password" required>  </div>  <div class="form-group" id="group4"> -    <label for="i_password_retype">Repeat password:</label> +    <label for="i_password_retype"><?= __("Repeat password:") ?></label>      <input class="form-control" id="i_password_retype" type="password" name="password_retype" required>  </div>  <div class="form-group" id="group5"> -    <label for="i_email">Email address:</label> +    <label for="i_email"><?= __("Email address:") ?></label>      <input class="form-control" id="i_email" type="email" name="email" value="<?= htmlentities($lastForm["email"] ?? "") ?>" required>  </div>  <div class="form-group" id="group6"> -    <label for="i_email">CAPTCHA:</label> +    <label for="i_email"><?= __("CAPTCHA:") ?></label>      <div class="text-center margin-bottom">          <img src="?_action=captcha&t=<?= htmlentities(strval(microtime(true) * 1000)) ?>" alt="CAPTCHA" width="192" height="48" id="captcha-img">      </div>      <div class="input-group">          <input type="text" name="captcha" id="i_captcha" class="form-control" required>          <div class="input-group-btn"> -            <button class="btn btn-default" type="button" id="btn-refresh-captcha"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span><span class="sr-only">New CAPTCHA</span></button> +            <button class="btn btn-default" type="button" id="btn-refresh-captcha"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span><span class="sr-only"><?= __("New CAPTCHA") ?></span></button>          </div>      </div>  </div>  <div class="form-group"> -    <button class="btn btn-default" type="submit">Register now</button> +    <button class="btn btn-default" type="submit"><?= __("Register now") ?></button>  </div>  <div class="form-group"> -    Already have an account? <a href="?_action=auth">Sign in now</a> +    <?= __("Already have an account? %link%Sign in now%/link%", [ +        "link" => '<a href="?_action=auth">', +        "/link" => '</a>', +    ]) ?>  </div>  </form>  </div> diff --git a/src/application/views/nav_logged_in.php b/src/application/views/nav_logged_in.php index 8ed8d07..39c65cb 100644 --- a/src/application/views/nav_logged_in.php +++ b/src/application/views/nav_logged_in.php @@ -2,12 +2,9 @@  use mystic\forum\orm\User;  ?>  <ul class="nav navbar-nav navbar-right"> -<li><p class="navbar-text">Welcome, -<?php if ($user->id === User::SUPERUSER_ID): ?> -<strong class="text-danger"><?= htmlentities($user->displayName) ?></strong>! -<?php else: ?> -<strong><?= htmlentities($user->displayName) ?></strong>! -<?php endif; ?> +<li><p class="navbar-text"><?= __("Welcome, %user%!", [ +    "user" => ($user->id === User::SUPERUSER_ID) ? ('<strong class="text-danger">' . htmlentities($user->displayName) . '</strong>') : ('<strong>' . htmlentities($user->displayName) . '</strong>') +]) ?>  </p></li>  <li><a href="?_action=viewuser&user=<?= htmlentities(urlencode($user->id)) ?>"><span class="glyphicon glyphicon-user" aria-hidden="true"></span><span class="sr-only">View profile</span></a></li>  <li><a href="?_action=logout&next=<?= htmlentities(urlencode($_SERVER["REQUEST_URI"])) ?>"><span class="glyphicon glyphicon-log-out" aria-hidden="true"></span><span class="sr-only">Log out</span></a></li> diff --git a/src/application/views/view_post.php b/src/application/views/view_post.php index a7624ae..510b22c 100644 --- a/src/application/views/view_post.php +++ b/src/application/views/view_post.php @@ -31,7 +31,7 @@ $your_are_the_author = $GLOBALS["currentUser"]?->id === $postAuthor?->id;  <div class="media-body">      <div class="well icon-well text-warning">          <span class="glyphicon glyphicon-exclamation-sign color-warning" aria-hidden="true"></span> -        <em>This post has been deleted</em> +        <em><?= __("This post has been deleted") ?></em>      </div>  </div>  </div> @@ -41,10 +41,10 @@ $your_are_the_author = $GLOBALS["currentUser"]?->id === $postAuthor?->id;      <div class="media-left hidden-sm hidden-xs">          <?php if ($postAuthor): ?>              <?php if ($hide_actions): ?> -                <img class="media-object" alt="Profile picture" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64"> +                <img class="media-object" alt="<?= __("Profile picture") ?>" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64">              <?php else: ?>                  <a href="?_action=viewuser&user=<?= htmlentities(urlencode($postAuthor->id)) ?>"> -                    <img class="media-object" alt="Profile picture" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64"> +                    <img class="media-object" alt="<?= __("Profile picture") ?>" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64">                  </a>              <?php endif; ?>          <?php else: ?> @@ -58,17 +58,17 @@ $your_are_the_author = $GLOBALS["currentUser"]?->id === $postAuthor?->id;                  <div class="panel-title h3">                      <?php if (!$hide_actions): ?>                      <div class="pull-right"> -                        <a href="#post-<?= htmlentities(urlencode($post->id)) ?>" class="btn btn-default"><span class="glyphicon glyphicon-link" aria-hidden="true"></span><span class="sr-only">Permalink</span></a> +                        <a href="#post-<?= htmlentities(urlencode($post->id)) ?>" class="btn btn-default"><span class="glyphicon glyphicon-link" aria-hidden="true"></span><span class="sr-only"><?= __("Permalink") ?></span></a>                          <?php if ($canReply): ?> -                            <button data-post-id="<?= htmlentities($post->id) ?>" class="btn btn-default js-only _reply-post"><span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span><span class="sr-only">Reply to post</span></button> +                            <button data-post-id="<?= htmlentities($post->id) ?>" class="btn btn-default js-only _reply-post"><span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span><span class="sr-only"><?= __("Reply to post") ?></span></button>                          <?php endif; ?>                          <?php if ($canEdit): ?> -                            <button data-post-id="<?= htmlentities($post->id) ?>" class="btn btn-default js-only _edit-post"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span><span class="sr-only">Edit post</span></button> +                            <button data-post-id="<?= htmlentities($post->id) ?>" class="btn btn-default js-only _edit-post"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span><span class="sr-only"><?= __("Edit post") ?></span></button>                          <?php endif; ?>                          <?php if ($canDelete): ?>                              <form action="?_action=deletepost" method="post" class="seamless-inline">                                  <input type="hidden" name="post" value="<?= htmlentities($post->id) ?>"> -                                <button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span><span class="sr-only">Delete post</span></button> +                                <button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span><span class="sr-only"><?= __("Delete post") ?></span></button>                              </form>                          <?php endif; ?>                      </div> @@ -80,15 +80,15 @@ $your_are_the_author = $GLOBALS["currentUser"]?->id === $postAuthor?->id;                              <a href="?_action=viewuser&user=<?= htmlentities(urlencode($postAuthor->id)) ?>"><?= htmlentities($postAuthor->displayName) ?></a>                          <?php endif; ?>                          <?php if ($your_are_the_author): ?> -                            <span class="text-normal label label-primary">You</span> +                            <span class="text-normal label label-primary"><?= __("You") ?></span>                          <?php endif; ?>                      <?php else: ?> -                        <em class="text-muted">(deleted)</em> +                        <em class="text-muted"><?= __("(deleted)") ?></em>                      <?php endif; ?>                  </div>                  <span class="_time"><?= $post->postDate->format("c"); ?></span>                  <?php if ($post->edited): ?> -                    <em class="text-muted">(edited)</em> +                    <em class="text-muted"><?= __("(edited)") ?></em>                  <?php endif; ?>              </div>              <div class="panel-body"> diff --git a/src/application/views/view_topic_start.php b/src/application/views/view_topic_start.php index fc54623..35befc7 100644 --- a/src/application/views/view_topic_start.php +++ b/src/application/views/view_topic_start.php @@ -16,17 +16,15 @@ $canDelete = ($GLOBALS["currentUser"]?->id === $topicAuthor->id && $topicAuthor-              <div class="modal-content">                  <div class="modal-header">                      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> -                    <h4 class="modal-title">Edit post</h4> +                    <h4 class="modal-title"><?= __("Edit post") ?></h4>                  </div>                  <div class="modal-body"> -                    <div class="form-group"> -                        <label class="sr-only" for="i_edit_message">Message:</label> -                        <textarea class="form-control" name="message" id="i_edit_message" rows="12" style="resize: vertical; max-height: 500px"></textarea> -                    </div> +                    <label class="sr-only" for="i_edit_message"><?= __("Message:") ?></label> +                    <textarea class="form-control" name="message" id="i_edit_message" rows="12" style="resize: vertical; max-height: 500px"></textarea>                  </div>                  <div class="modal-footer"> -                    <button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Cancel</button> -                    <button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Save changes</button> +                    <button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> <?= __("Cancel") ?></button> +                    <button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> <?= __("Save changes") ?></button>                  </div>              </div>          </form> @@ -37,14 +35,14 @@ $canDelete = ($GLOBALS["currentUser"]?->id === $topicAuthor->id && $topicAuthor-          <div class="modal-dialog modal-danger" role="document">              <div class="modal-content panel-danger">                  <div class="modal-header panel-heading"> -                    <h4 class="modal-title"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> Permission denied</h4> +                    <h4 class="modal-title"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?= __("Permission denied") ?></h4>                  </div>                  <div class="modal-body"> -                    You must be logged in to view attachments +                    <?= __("You must be logged in to view attachments") ?>                  </div>                  <div class="modal-footer"> -                    <button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Close</button> -                    <a href="?_action=auth&next=<?= htmlentities(urlencode($_SERVER["REQUEST_URI"])) ?>" class="btn btn-success"><span class="glyphicon glyphicon-user" aria-hidden="true"></span> Log in</a> +                    <button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> <?= __("Close") ?></button> +                    <a href="?_action=auth&next=<?= htmlentities(urlencode($_SERVER["REQUEST_URI"])) ?>" class="btn btn-success"><span class="glyphicon glyphicon-user" aria-hidden="true"></span> <?= __("Log in") ?></a>                  </div>              </div>          </div> @@ -65,37 +63,34 @@ $canDelete = ($GLOBALS["currentUser"]?->id === $topicAuthor->id && $topicAuthor-              <?= htmlentities($topic->title) ?>              <div class="pull-right text-normal">                  <?php if ($canEdit): ?> -                    <button id="btn-edit-title" class="btn btn-default js-only"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit title</button> +                    <button id="btn-edit-title" class="btn btn-default js-only"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> <?= __("Edit title") ?></button>                  <?php endif; ?>                  <?php if ($canReply): ?> -                    <button id="btn-reply" class="btn btn-default js-only"><span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span> Reply</button> +                    <button id="btn-reply" class="btn btn-default js-only"><span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span> <?= __("Reply") ?></button>                  <?php endif; ?>                  <?php if ($canDelete): ?>                      <form action="?_action=deletetopic" method="post" class="seamless-inline">                          <input type="hidden" name="topic" value="<?= htmlentities($topic->id) ?>"> -                        <button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete topic</button> +                        <button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span> <?= __("Delete topic") ?></button>                      </form>                  <?php endif; ?>              </div>          </div><br> -        Started by -        <?php if ($topicAuthor !== null): ?> -        <a href="?_action=viewuser&user=<?= htmlentities(urlencode($topicAuthor->id)) ?>"><?= htmlentities($topicAuthor->displayName) ?></a> -        <?php else: ?> -        <em>(deleted)</em> -        <?php endif; ?> -        on <span class="_time"><?= htmlentities($topic->creationDate->format("c")) ?></span> +        <?= __("Started by %user% on %date%", [ +            "user" => ($topicAuthor !== null) ? ('<a href="?_action=viewuser&user=' . htmlentities(urlencode($topicAuthor->id)) . '">' . htmlentities($topicAuthor->displayName) . '</a>') : __("(deleted)"), +            "date" => '<span class="_time">' . htmlentities($topic->creationDate->format("c")) . '</span>', +        ]); ?>      </div>      <?php if ($canEdit): ?> -        <form action="?_action=updatetopic" method="post" id="editHeading" style="display: none;" class="form-inline seamless-inline" style="display: block"> +        <form action="?_action=updatetopic" method="post" id="editHeading" style="display: none;" class="form-inline seamless-inline">              <input type="hidden" name="topic" value="<?= htmlentities(urlencode($topic->id)) ?>">              <div class="row">                  <div class="col-md-8">                      <input type="text" class="form-control" name="title" id="i_edit_title" data-original-value="<?= htmlentities($topic->title) ?>" value="<?= htmlentities($topic->title) ?>" style="box-sizing: border-box; width: 100%; font-size: 36px; height: 56px">                  </div>                  <div class="col-md-4 text-right"> -                    <button type="button" id="topicTitleEditCancel" class="btn btn-default"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Cancel</button> -                    <button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Save changes</button> +                    <button type="button" id="topicTitleEditCancel" class="btn btn-default"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> <?= __("Cancel") ?></button> +                    <button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> <?= __("Save changes") ?></button>                  </div>              </div>          </form> diff --git a/src/application/views/view_topics.php b/src/application/views/view_topics.php index cb871cb..291fbdc 100644 --- a/src/application/views/view_topics.php +++ b/src/application/views/view_topics.php @@ -6,7 +6,7 @@ use mystic\forum\orm\UserPermissions;  if ($GLOBALS["currentUser"]?->hasPermission(UserPermissions::CREATE_OWN_TOPIC)):  ?>  <p class="text-right"> -<a href="?_action=newtopic" class="btn btn-success"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> New topic</a> +<a href="?_action=newtopic" class="btn btn-success"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> <?= __("New topic") ?></a>  </p>  <?php endif; ?>  <div class="list-group"> diff --git a/src/application/views/view_user.php b/src/application/views/view_user.php index 79b57d2..536cc33 100644 --- a/src/application/views/view_user.php +++ b/src/application/views/view_user.php @@ -12,15 +12,11 @@ $canEdit = ($user->id === $GLOBALS["currentUser"]?->id && $user->hasPermission(U  $isOwnProfile = $user->id === $GLOBALS["currentUser"]?->id; -$sIsOwn_your = ""; -if ($isOwnProfile) -    $sIsOwn_your = " your"; -  $sUserPossessive = "";  if ($isOwnProfile) -    $sUserPossessive = "Your"; +    $sUserPossessive = "Your posts";  else -    $sUserPossessive = $user->displayName . "'s"; +    $sUserPossessive = "%display_name%'s posts";  $dateJoined = DateTime::createFromImmutable($user->created);  $dateJoined->setTime(0, 0, 0, 0); @@ -30,9 +26,11 @@ $dateJoined->setTime(0, 0, 0, 0);      <img class="pull-left margin-right" src="?_action=profilepicture&user=<?= htmlentities(urlencode($user->id)) ?>">      <span class="h1"><?= htmlentities($user->displayName) ?></span>      <?php if ($isOwnProfile): ?> -        <span class="label label-primary">You</span> +        <span class="label label-primary"><?= __("You") ?></span>      <?php endif; ?><br> -    @<?= htmlentities($user->name) ?> • <span class="text-muted">Member since <span class="_date"><?= htmlentities($dateJoined->format("c")); ?></span></span> +    @<?= htmlentities($user->name) ?> • <span class="text-muted"><?= __("Member since %join_date%", [ +        "join_date" => '<span class="_date">' . htmlentities($dateJoined->format("c")) . '</span>', +    ]) ?></span>  </div>  <?php if ($canEdit): ?> @@ -40,7 +38,9 @@ $dateJoined->setTime(0, 0, 0, 0);  <div class="col-md-9">  <?php endif; ?> -<h3><?= $sUserPossessive ?> posts</h3> +<h3><?= __($sUserPossessive, [ +    "display_name" => $user->displayName, +]) ?></h3>  <?php if (count($posts) > 0): ?>      <div class="post-container"> @@ -49,19 +49,22 @@ $dateJoined->setTime(0, 0, 0, 0);                  <?php foreach ($posts as $post): if ($post->deleted) continue; ?>                      <a href="?_action=viewtopic&topic=<?= htmlentities(urlencode($post->topicId)) ?>#post-<?= htmlentities(urlencode($post->id)) ?>" class="list-group-item">                          <?= htmlentities(StringUtils::truncate(strip_tags(renderPost($post->content)), 100)) ?><br> -                        <span class="text-muted">posted on <span class="_time"><?= htmlentities($post->postDate->format("c")) ?></span> in <em><?= htmlentities($topics[$post->topicId]?->title ?? "unknown") ?></em></span> +                        <span class="text-muted"><?= __("posted on %post_date% in %topic%", [ +                            "post_date" => '<span class="_time">' . htmlentities($post->postDate->format("c")) . '</span>', +                            "topic" => '<em>' . htmlentities($topics[$post->topicId]?->title ?? "unknown") . '</em>', +                        ]) ?></span>                      </a>                  <?php endforeach; ?>              </div>          </div>          <div class="post-container-controls"> -            <button class="btn btn-default">Show all posts</button> +            <button class="btn btn-default"><?= __("Show all posts") ?></button>          </div>      </div>  <?php else: ?>      <div class="well icon-well text-info margin-top margin-bottom">          <span class="glyphicon glyphicon-info-sign color-info" aria-hidden="true"></span> -        <em>This user has not posted anything yet</em> +        <em><?= __("This user has not posted anything yet") ?></em>      </div>  <?php endif; ?> @@ -69,7 +72,7 @@ $dateJoined->setTime(0, 0, 0, 0);  </div>  <div class="col-md-3"> -<h3>Edit<?= $sIsOwn_your ?> profile</h3> +<h3><?= __("Edit profile") ?></h3>  <?php  if (($_formError = RequestUtils::getAndClearFormError()) !== null) {      _view("alert_error", ["message" => $_formError]); @@ -77,24 +80,24 @@ if (($_formError = RequestUtils::getAndClearFormError()) !== null) {  ?>  <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>" method="post" enctype="multipart/form-data">      <div class="form-group"> -        <label for="i_display_name">Display name:</label> +        <label for="i_display_name"><?= __("Display name:") ?></label>          <input required class="form-control" type="text" name="display_name" id="i_display_name" value="<?= htmlentities($user->displayName) ?>">      </div>      <div class="form-group"> -        <label for="i_name">Login name:</label> +        <label for="i_name"><?= __("Username:") ?></label>          <?php if ($lastNameChangeTooRecent): ?>              <input required class="form-control" type="text" id="i_name" value="<?= htmlentities($user->name) ?>" disabled> -            <small class="text-danger"><strong>You can only change your username every 30 days!</strong></small> +            <small class="text-danger"><strong><?= __("You can only change your username every 30 days!") ?></strong></small>          <?php else: ?>              <input required class="form-control" type="text" name="name" id="i_name" value="<?= htmlentities($user->name) ?>">          <?php endif; ?>      </div>      <div class="form-group"> -        <label for="i_email">Email address:</label> +        <label for="i_email"><?= __("Email address:") ?></label>          <input required class="form-control" type="email" id="i_email" value="<?= htmlentities($user->email) ?>" disabled>      </div>      <div class="form-group"> -        <label>Profile picture:</label> +        <label><?= __("Profile picture:") ?></label>  <?php  $_checkbox_disabled = empty($user->profilePicture);  $_checkbox_disabled_class = $_checkbox_disabled ? " disabled text-muted" : ""; @@ -102,29 +105,29 @@ $_checkbox_disabled_class = $_checkbox_disabled ? " disabled text-muted" : "";          <div class="radio margin-top-0 <?= $_checkbox_disabled_class ?>">              <label>                  <input type="radio" name="pfp_action" id="pfp_action_1" value="keep"<?= !empty($user->profilePicture) ? ' checked' : ' disabled' ?>> -                Keep current profile picture +                <?= __("Keep current profile picture") ?>              </label>          </div>          <div class="radio">              <label>                  <input type="radio" name="pfp_action" id="pfp_action_2" value="remove"<?= empty($user->profilePicture) ? ' checked' : '' ?>>                  <?php if (empty($user->profilePicture)): ?> -                    No profile picture +                    <?= __("No profile picture") ?>                  <?php else: ?> -                    Remove profile picture +                    <?= __("Remove profile picture") ?>                  <?php endif; ?>              </label>          </div>          <div class="radio">              <label>                  <input type="radio" name="pfp_action" value="replace" id="pfp_action_3"> -                Upload new profile picture +                <?= __("Upload new profile picture") ?>              </label>          </div>          <input type="file" name="pfp" id="i_pfp" accept="image/png,image/jpeg" class="margin-left-3x">      </div>      <div class="form-group"> -        <button type="submit" class="btn btn-success">Save changes</button> +        <button type="submit" class="btn btn-success"><?= __("Save changes") ?></button>      </div>  </form>  </div> |