nodebb-theme-persona 15.0.10 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/package.json +2 -2
  2. package/templates/account/blocks.tpl +8 -8
  3. package/templates/account/categories.tpl +6 -6
  4. package/templates/account/consent.tpl +21 -21
  5. package/templates/account/edit/password.tpl +7 -7
  6. package/templates/account/edit/username.tpl +5 -5
  7. package/templates/account/edit.tpl +21 -21
  8. package/templates/account/followers.tpl +2 -2
  9. package/templates/account/following.tpl +2 -2
  10. package/templates/account/groups.tpl +2 -2
  11. package/templates/account/info.tpl +35 -35
  12. package/templates/account/posts.tpl +8 -8
  13. package/templates/account/profile.tpl +19 -36
  14. package/templates/account/sessions.tpl +1 -1
  15. package/templates/account/settings.tpl +58 -58
  16. package/templates/account/tags.tpl +1 -1
  17. package/templates/account/theme.tpl +8 -8
  18. package/templates/account/topics.tpl +8 -8
  19. package/templates/account/uploads.tpl +5 -5
  20. package/templates/categories.tpl +1 -1
  21. package/templates/category.tpl +6 -6
  22. package/templates/modules/usercard.tpl +4 -5
  23. package/templates/notifications.tpl +4 -4
  24. package/templates/partials/account/header.tpl +4 -4
  25. package/templates/partials/account/menu.tpl +27 -27
  26. package/templates/partials/account/session-list.tpl +3 -3
  27. package/templates/partials/buttons/newTopic.tpl +1 -1
  28. package/templates/partials/categories/item.tpl +3 -3
  29. package/templates/partials/categories/lastpost.tpl +4 -4
  30. package/templates/partials/category/subcategory.tpl +2 -2
  31. package/templates/partials/chats-menu.tpl +2 -2
  32. package/templates/partials/cookie-consent.tpl +2 -2
  33. package/templates/partials/header/chats.tpl +3 -3
  34. package/templates/partials/header/notifications.tpl +5 -5
  35. package/templates/partials/header/search.tpl +4 -4
  36. package/templates/partials/header/user-menu.tpl +18 -18
  37. package/templates/partials/menu.tpl +9 -9
  38. package/templates/partials/notifications_list.tpl +3 -3
  39. package/templates/partials/paginator.tpl +9 -9
  40. package/templates/partials/post_bar.tpl +2 -2
  41. package/templates/partials/posts_list_item.tpl +2 -2
  42. package/templates/partials/quick-category-search-results.tpl +4 -4
  43. package/templates/partials/quick-search-results.tpl +2 -2
  44. package/templates/partials/search/results.tpl +2 -2
  45. package/templates/partials/tags_list.tpl +1 -1
  46. package/templates/partials/topic/crosspost.tpl +1 -1
  47. package/templates/partials/topic/event.tpl +31 -5
  48. package/templates/partials/topic/navigation-post.tpl +1 -1
  49. package/templates/partials/topic/navigator.tpl +4 -4
  50. package/templates/partials/topic/necro-post.tpl +1 -1
  51. package/templates/partials/topic/post-editor.tpl +1 -1
  52. package/templates/partials/topic/post.tpl +12 -12
  53. package/templates/partials/topic/quickreply.tpl +6 -4
  54. package/templates/partials/topic/reply-button.tpl +5 -5
  55. package/templates/partials/topic/selection-tooltip.tpl +1 -1
  56. package/templates/partials/topic/sort.tpl +5 -5
  57. package/templates/partials/topic/stats.tpl +11 -11
  58. package/templates/partials/topic/tools.tpl +1 -1
  59. package/templates/partials/topic/watch.tpl +9 -9
  60. package/templates/partials/topics_list.tpl +14 -14
  61. package/templates/partials/users_list.tpl +1 -1
  62. package/templates/partials/users_list_menu.tpl +6 -6
  63. package/templates/popular.tpl +2 -2
  64. package/templates/recent.tpl +3 -3
  65. package/templates/tag.tpl +3 -3
  66. package/templates/tags.tpl +2 -2
  67. package/templates/top.tpl +2 -2
  68. package/templates/topic.tpl +4 -4
  69. package/templates/unread.tpl +3 -3
  70. package/templates/users.tpl +2 -2
  71. package/templates/world.tpl +18 -18
@@ -8,93 +8,93 @@
8
8
  <!-- IF !banned -->
9
9
  <!-- IF canChat -->
10
10
  <li class="<!-- IF !hasPrivateChat -->hidden<!-- ENDIF !hasPrivateChat -->">
11
- <a class="dropdown-item rounded-1" component="account/chat" href="#" role="menuitem">[[user:chat-with, {username}]]</a>
11
+ <a class="dropdown-item rounded-1" component="account/chat" href="#" role="menuitem">{{tx("user:chat-with", txEscape(username))}}</a>
12
12
  </li>
13
13
  <li>
14
- <a class="dropdown-item rounded-1" component="account/new-chat" href="#" role="menuitem">[[user:new-chat-with, {username}]]</a>
14
+ <a class="dropdown-item rounded-1" component="account/new-chat" href="#" role="menuitem">{{tx("user:new-chat-with", txEscape(username))}}</a>
15
15
  </li>
16
16
  <!-- ENDIF canChat -->
17
17
  <li>
18
- <a {{{if flagId }}}hidden{{{end}}} class="dropdown-item rounded-1" component="account/flag" href="#" role="menuitem">[[user:flag-profile]]</a>
18
+ <a {{{if flagId }}}hidden{{{end}}} class="dropdown-item rounded-1" component="account/flag" href="#" role="menuitem">{{tx("user:flag-profile")}}</a>
19
19
  </li>
20
20
  <li>
21
- <a {{{if !flagId }}}hidden{{{end}}} class="dropdown-item rounded-1" component="account/already-flagged" href="#" role="menuitem" data-flag-id="{flagId}">[[user:profile-flagged]]</a>
21
+ <a {{{if !flagId }}}hidden{{{end}}} class="dropdown-item rounded-1" component="account/already-flagged" href="#" role="menuitem" data-flag-id="{flagId}">{{tx("user:profile-flagged")}}</a>
22
22
  </li>
23
23
  <li>
24
- <a class="dropdown-item rounded-1 {{{ if ./isBlocked }}}hidden{{{ end }}}" component="account/block" href="#" role="menuitem">[[user:block-user]]</a>
24
+ <a class="dropdown-item rounded-1 {{{ if ./isBlocked }}}hidden{{{ end }}}" component="account/block" href="#" role="menuitem">{{tx("user:block-user")}}</a>
25
25
  </li>
26
26
  <li>
27
- <a class="dropdown-item rounded-1 {{{ if !./isBlocked }}}hidden{{{ end }}}" component="account/unblock" href="#" role="menuitem">[[user:unblock-user]]</a>
27
+ <a class="dropdown-item rounded-1 {{{ if !./isBlocked }}}hidden{{{ end }}}" component="account/unblock" href="#" role="menuitem">{{tx("user:unblock-user")}}</a>
28
28
  </li>
29
29
  <li role="separator" class="dropdown-divider"></li>
30
30
  <!-- ENDIF !banned -->
31
31
  <!-- ENDIF !isSelf -->
32
32
  <!-- ENDIF loggedIn -->
33
33
  <li>
34
- <a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}" class="d-inline-block" id="profile" role="menuitem">[[user:profile]]</a>
34
+ <a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}" class="d-inline-block" id="profile" role="menuitem">{{tx("user:profile")}}</a>
35
35
  </li>
36
36
  <!-- IF canEdit -->
37
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/edit" role="menuitem">[[user:edit]]</a></li>
38
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/settings" role="menuitem">[[user:settings]]</a></li>
37
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/edit" role="menuitem">{{tx("user:edit")}}</a></li>
38
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/settings" role="menuitem">{{tx("user:settings")}}</a></li>
39
39
  <!-- ENDIF canEdit -->
40
40
 
41
41
  <!-- IF !isSelf -->
42
42
  {{{ if (canBan || canMute) }}}
43
43
  <li role="separator" class="dropdown-divider"></li>
44
- <li class="dropdown-header">[[user:admin-actions-label]]</li>
44
+ <li class="dropdown-header">{{tx("user:admin-actions-label")}}</li>
45
45
  {{{ end }}}
46
46
  {{{ if canBan }}}
47
47
  <li class="<!-- IF banned -->hide<!-- ENDIF banned -->">
48
- <a class="dropdown-item rounded-1" component="account/ban" href="#" role="menuitem">[[user:ban-account]]</a>
48
+ <a class="dropdown-item rounded-1" component="account/ban" href="#" role="menuitem">{{tx("user:ban-account")}}</a>
49
49
  </li>
50
50
  <li class="<!-- IF !banned -->hide<!-- ENDIF !banned -->">
51
- <a class="dropdown-item rounded-1" component="account/unban" href="#" role="menuitem">[[user:unban-account]]</a>
51
+ <a class="dropdown-item rounded-1" component="account/unban" href="#" role="menuitem">{{tx("user:unban-account")}}</a>
52
52
  </li>
53
53
  {{{ end }}}
54
54
  {{{ if canMute }}}
55
55
  <li class="<!-- IF muted -->hide<!-- ENDIF muted -->">
56
- <a class="dropdown-item rounded-1" component="account/mute" href="#" role="menuitem">[[user:mute-account]]</a>
56
+ <a class="dropdown-item rounded-1" component="account/mute" href="#" role="menuitem">{{tx("user:mute-account")}}</a>
57
57
  </li>
58
58
  <li class="<!-- IF !muted -->hide<!-- ENDIF !muted -->">
59
- <a class="dropdown-item rounded-1" component="account/unmute" href="#" role="menuitem">[[user:unmute-account]]</a>
59
+ <a class="dropdown-item rounded-1" component="account/unmute" href="#" role="menuitem">{{tx("user:unmute-account")}}</a>
60
60
  </li>
61
61
  {{{ end }}}
62
62
  <!-- IF isAdmin -->
63
63
  <li>
64
- <a component="account/delete-account" href="#" class="dropdown-item rounded-1" role="menuitem">[[user:delete-account-as-admin]]</a>
65
- <a component="account/delete-content" href="#" class="dropdown-item rounded-1" role="menuitem">[[user:delete-content]]</a>
66
- <a component="account/delete-all" href="#" class="dropdown-item rounded-1" role="menuitem">[[user:delete-all]]</a>
64
+ <a component="account/delete-account" href="#" class="dropdown-item rounded-1" role="menuitem">{{tx("user:delete-account-as-admin")}}</a>
65
+ <a component="account/delete-content" href="#" class="dropdown-item rounded-1" role="menuitem">{{tx("user:delete-content")}}</a>
66
+ <a component="account/delete-all" href="#" class="dropdown-item rounded-1" role="menuitem">{{tx("user:delete-all")}}</a>
67
67
  </li>
68
68
  <!-- ENDIF isAdmin -->
69
69
  <!-- ENDIF !isSelf -->
70
70
 
71
71
  <li role="separator" class="dropdown-divider"></li>
72
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/following" role="menuitem">[[user:following]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.following}">{formattedNumber(counts.following)}</span></a></li>
73
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/followers" role="menuitem">[[user:followers]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.followers}">{formattedNumber(counts.followers)}</span></a></li>
72
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/following" role="menuitem">{{tx("user:following")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.following}">{formattedNumber(counts.following)}</span></a></li>
73
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/followers" role="menuitem">{{tx("user:followers")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.followers}">{formattedNumber(counts.followers)}</span></a></li>
74
74
  <!-- IF canEdit -->
75
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/blocks" role="menuitem">[[user:blocks]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.blocks}">{formattedNumber(counts.blocks)}</span></a></li>
75
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/blocks" role="menuitem">{{tx("user:blocks")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.blocks}">{formattedNumber(counts.blocks)}</span></a></li>
76
76
  <!-- ENDIF canEdit -->
77
77
  <li role="separator" class="dropdown-divider"></li>
78
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/topics" role="menuitem">[[global:topics]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.topics}">{formattedNumber(counts.topics)}</span></a></li>
79
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/posts" role="menuitem">[[global:posts]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.posts}">{formattedNumber(counts.posts)}</span></a></li>
78
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/topics" role="menuitem">{{tx("global:topics")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.topics}">{formattedNumber(counts.topics)}</span></a></li>
79
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/posts" role="menuitem">{{tx("global:posts")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.posts}">{formattedNumber(counts.posts)}</span></a></li>
80
80
 
81
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/groups" role="menuitem">[[global:header.groups]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.groups}">{formattedNumber(counts.groups)}</span></a></li>
81
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/groups" role="menuitem">{{tx("global:header.groups")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.groups}">{formattedNumber(counts.groups)}</span></a></li>
82
82
 
83
83
  <!-- IF canEdit -->
84
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/categories" role="menuitem">[[user:watched-categories]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.categoriesWatched}">{formattedNumber(counts.categoriesWatched)}</span></a></li>
84
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/categories" role="menuitem">{{tx("user:watched-categories")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.categoriesWatched}">{formattedNumber(counts.categoriesWatched)}</span></a></li>
85
85
  {{{ if isSelf }}}
86
86
  <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/tags" role="menuitem">
87
- [[user:watched-tags]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.tagsWatched}">{formattedNumber(counts.tagsWatched)}</span></a></li>
87
+ {{tx("user:watched-tags")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.tagsWatched}">{formattedNumber(counts.tagsWatched)}</span></a></li>
88
88
  {{{ end }}}
89
89
 
90
- <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/uploads" role="menuitem">[[global:uploads]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.uploaded}">{formattedNumber(counts.uploaded)}</span></a></li>
90
+ <li><a class="dropdown-item rounded-1 d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/uploads" role="menuitem">{{tx("global:uploads")}} <span class="badge bg-secondary rounded-pill ms-2" title="{counts.uploaded}">{formattedNumber(counts.uploaded)}</span></a></li>
91
91
  <!-- ENDIF canEdit -->
92
92
 
93
93
  {{{ each profile_links }}}
94
94
  <!-- IF @first -->
95
95
  <li role="separator" class="dropdown-divider"></li>
96
96
  <!-- ENDIF @first -->
97
- <li id="{./id}" class="plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}}"><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/{profile_links.route}">{{{ if icon }}}<i class="fa fa-fw {./icon}"></i> {{{ end }}}{tx(./name)}</a></li>
97
+ <li id="{./id}" class="plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}}"><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{userslug}/{profile_links.route}">{{{ if icon }}}<i class="fa fa-fw {./icon}"></i> {{{ end }}}{{tx(./name)}}</a></li>
98
98
  {{{ end }}}
99
99
  </ul>
100
100
  </div>
@@ -3,16 +3,16 @@
3
3
  <div class="float-end">
4
4
  {{{ if isSelfOrAdminOrGlobalModerator }}}
5
5
  {{{ if !./current }}}
6
- <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">[[user:revoke-session]]</button>
6
+ <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">{{tx("user:revoke-session")}}</button>
7
7
  {{{ end }}}
8
8
  {{{ end }}}
9
9
  {{userAgentIcons(@value)}}
10
10
  <i class="fa fa-circle text-{{{ if ./current }}}success{{{ else }}}muted{{{ end }}}"></i>
11
11
  </div>
12
- [[user:browser-version-on-platform, {./browser}, {./version}, {./platform}]]<br />
12
+ {{tx("user:browser-version-on-platform", ./browser, ./version, ./platform)}}<br />
13
13
  <small class="timeago text-muted" title="{../datetimeISO}"></small>
14
14
  <ul>
15
- <li><strong>[[global:ip-address]]</strong>: {../ip}</li>
15
+ <li><strong>{{tx("global:ip-address")}}</strong>: {../ip}</li>
16
16
  </ul>
17
17
  </li>
18
18
  {{{ end }}}
@@ -1,6 +1,6 @@
1
1
  <noscript><div class="dropdown" component="category-selector"></noscript>
2
2
  <button component="category/post" for="category-dropdown-check" class="btn btn-primary btn-sm text-nowrap" id="new_topic" role="button">
3
- [[category:new-topic-button]]
3
+ {{tx("category:new-topic-button")}}
4
4
  </button>
5
5
  <noscript>
6
6
  <input type="checkbox" class="hidden" id="category-dropdown-check" aria-hidden="true">
@@ -25,7 +25,7 @@
25
25
  <ul class="list-unstyled category-children row row-cols-1 row-cols-md-2 g-2 my-1 w-100">
26
26
  {{{ each ./children }}}
27
27
  {{{ if !./isSection }}}
28
- <li class="category-children-item small d-flex gap-1 align-items-center">
28
+ <li class="category-children-item small d-flex gap-1 align-items-center text-break">
29
29
  {{buildCategoryIcon(@value, "24px", "rounded-circle")}}
30
30
  <a href="{{{ if ./link }}}{./link}{{{ else }}}{config.relative_path}/category/{./slug}{{{ end }}}" class="text-reset">{./name}</a>
31
31
  </li>
@@ -41,11 +41,11 @@
41
41
  <div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr;">
42
42
  <div class="overflow-hidden rounded-1 d-flex flex-column align-items-center">
43
43
  <span class="fs-4" title="{./totalTopicCount}">{humanReadableNumber(./totalTopicCount, 0)}</span>
44
- <span class="text-uppercase text-xs">[[global:topics]]</span>
44
+ <span class="text-uppercase text-xs">{{tx("global:topics")}}</span>
45
45
  </div>
46
46
  <div class="overflow-hidden rounded-1 d-flex flex-column align-items-center">
47
47
  <span class="fs-4" title="{./totalPostCount}">{humanReadableNumber(./totalPostCount, 0)}</span>
48
- <span class="text-uppercase text-xs">[[global:posts]]</span>
48
+ <span class="text-uppercase text-xs">{{tx("global:posts")}}</span>
49
49
  </div>
50
50
  </div>
51
51
  {{{ if !config.hideCategoryLastPost }}}
@@ -4,11 +4,11 @@
4
4
  <div component="category/posts" class="ps-2 text-xs d-flex flex-column h-100 gap-1">
5
5
  <div class="text-nowrap text-truncate">
6
6
  <a class="text-decoration-none avatar-tooltip" title="{./user.displayname}" href="{config.relative_path}/user/{./user.userslug}">{{buildAvatar(posts.user, "18px", true)}}</a>
7
- <a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" title="{./timestampISO}" aria-label="[[global:lastpost]]"></a>
7
+ <a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" title="{./timestampISO}" aria-label="{{tx("global:lastpost")}}"></a>
8
8
  </div>
9
9
  <div class="post-content text-xs text-break line-clamp-sm-2 lh-sm position-relative flex-fill">
10
- <a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" aria-label="[[global:lastpost]]"></a>
11
- {{txEscape(./content)}}
10
+ <a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" aria-label="{{tx("global:lastpost")}}"></a>
11
+ {{./content}}
12
12
  </div>
13
13
  </div>
14
14
  {{{ end }}}
@@ -17,7 +17,7 @@
17
17
  {{{ if !./posts.length }}}
18
18
  <div component="category/posts" class="ps-2">
19
19
  <div class="post-content overflow-hidden text-xs">
20
- [[category:no-new-posts]]
20
+ {{tx("category:no-new-posts")}}
21
21
  </div>
22
22
  </div>
23
23
  {{{ end }}}
@@ -3,7 +3,7 @@
3
3
  {{{ if hasMoreSubCategories }}}
4
4
  <div class="mb-2"><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
5
5
  {{{ else }}}
6
- <p>[[category:subcategories]]</p>
6
+ <p>{{tx("category:subcategories")}}</p>
7
7
  {{{ end }}}
8
8
 
9
9
  <ul component="category/subcategory/container" class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
@@ -12,7 +12,7 @@
12
12
  {{{end}}}
13
13
  </ul>
14
14
  {{{ if (hasMoreSubCategories && children.length) }}}
15
- <button class="btn btn-ghost btn-sm mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
15
+ <button class="btn btn-ghost btn-sm mb-2" component="category/load-more-subcategories">{{tx("category:x-more-categories", subCategoriesLeft)}}</button>
16
16
  {{{ end }}}
17
17
  </div>
18
18
  {{{ end }}}
@@ -24,7 +24,7 @@
24
24
  <div class="tab-pane fade" id="notifications">
25
25
  <section class="menu-section text-bg-dark px-1" data-section="notifications">
26
26
  <ul class="menu-section-list notification-list-mobile list-unstyled" component="notifications/list"></ul>
27
- <div class="menu-section-list text-center p-3"><a href="{relative_path}/notifications">[[notifications:see-all]]</a></div>
27
+ <div class="menu-section-list text-center p-3"><a href="{relative_path}/notifications">{{tx("notifications:see-all")}}</a></div>
28
28
  </section>
29
29
  </div>
30
30
  {{{ if !config.disableChat }}}
@@ -33,7 +33,7 @@
33
33
  <ul class="menu-section-list chat-list list-unstyled" component="chat/list">
34
34
 
35
35
  </ul>
36
- <div class="menu-section-list text-center p-3"><a class="navigation-link" href="{relative_path}/user/{user.userslug}/chats">[[modules:chat.see-all]]</a></div>
36
+ <div class="menu-section-list text-center p-3"><a class="navigation-link" href="{relative_path}/user/{user.userslug}/chats">{{tx("modules:chat.see-all")}}</a></div>
37
37
  </section>
38
38
  </div>
39
39
  {{{ end }}}
@@ -1,4 +1,4 @@
1
1
  <div class="cookie-consent">
2
- <button class="float-end btn btn-primary">{tx(dismiss)}</button>
3
- {tx(message)} <a target="_blank" rel="noopener" href="{link_url}">{tx(link)}</a>
2
+ <button class="float-end btn btn-primary">{{tx(dismiss)}}</button>
3
+ {{tx(message)}} <a target="_blank" rel="noopener" href="{link_url}">{{tx(link)}}</a>
4
4
  </div>
@@ -1,5 +1,5 @@
1
1
  <a class="nav-link" data-bs-toggle="dropdown" href="{relative_path}/user/{user.userslug}/chats" data-ajaxify="false" id="chat_dropdown" component="chat/dropdown" role="button" aria-haspopup="true" aria-expanded="false">
2
- <i component="chat/icon" class="fa {{{ if unreadCount.chat}}}fa-comment{{{ else }}}fa-comment-o{{{ end }}} fa-fw unread-count" data-content="{unreadCount.chat}"></i> <span class="d-inline d-sm-none">[[global:header.chats]]</span>
2
+ <i component="chat/icon" class="fa {{{ if unreadCount.chat}}}fa-comment{{{ else }}}fa-comment-o{{{ end }}} fa-fw unread-count" data-content="{unreadCount.chat}"></i> <span class="d-inline d-sm-none">{{tx("global:header.chats")}}</span>
3
3
  </a>
4
4
  <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="chat_dropdown" role="menu">
5
5
  <li>
@@ -28,8 +28,8 @@
28
28
  <li class="dropdown-divider"></li>
29
29
  <li>
30
30
  <div class="d-flex justify-content-center gap-1 flex-wrap">
31
- <a class="btn btn-light btn-sm mark-all-read flex-fill text-nowrap" href="#" component="chats/mark-all-read"><i class="fa fa-check-double"></i> [[modules:chat.mark-all-read]]</a>
32
- <a class="btn btn-primary btn-sm flex-fill text-nowrap" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-comments"></i> [[modules:chat.see-all]]</a>
31
+ <a class="btn btn-light btn-sm mark-all-read flex-fill text-nowrap" href="#" component="chats/mark-all-read"><i class="fa fa-check-double"></i> {{tx("modules:chat.mark-all-read")}}</a>
32
+ <a class="btn btn-primary btn-sm flex-fill text-nowrap" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-comments"></i> {{tx("modules:chat.see-all")}}</a>
33
33
  </div>
34
34
  </li>
35
35
  </ul>
@@ -1,11 +1,11 @@
1
- <a data-bs-toggle="dropdown" data-bs-auto-close="outside" href="#" role="button" class="nav-link position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[global:header.notifications]]">
1
+ <a data-bs-toggle="dropdown" data-bs-auto-close="outside" href="#" role="button" class="nav-link position-relative" aria-haspopup="true" aria-expanded="false" aria-label="{{tx("global:header.notifications")}}">
2
2
  <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
3
3
  </a>
4
4
 
5
5
  <ul class="notifications-dropdown dropdown-menu dropdown-menu-end p-1 shadow" role="menu">
6
6
  <li>
7
- <button type="button" class="btn btn-ghost btn-sm fw-bold" data-filter="all">All</button>
8
- <button type="button" class="btn btn-ghost btn-sm" data-filter="unread">Unread</button>
7
+ <button type="button" class="btn btn-ghost btn-sm fw-bold" data-filter="all">{{tx("notifications:all")}}</button>
8
+ <button type="button" class="btn btn-ghost btn-sm" data-filter="unread">{{tx("unread:title")}}</button>
9
9
  </li>
10
10
  <li class="dropdown-divider"></li>
11
11
  <li>
@@ -41,8 +41,8 @@
41
41
  <li class="dropdown-divider"></li>
42
42
  <li>
43
43
  <div class="d-flex justify-content-center gap-1 flex-wrap">
44
- <a role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap text-truncate ff-secondary"><i class="fa fa-check-double"></i> [[notifications:mark-all-read]]</a>
45
- <a class="btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see-all]]</a>
44
+ <a role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap text-truncate ff-secondary"><i class="fa fa-check-double"></i> {{tx("notifications:mark-all-read")}}</a>
45
+ <a class="btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/notifications"><i class="fa fa-list"></i> {{tx("notifications:see-all")}}</a>
46
46
  </div>
47
47
  </li>
48
48
  </ul>
@@ -1,9 +1,9 @@
1
1
  <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
2
2
  <div component="search/fields" class="hidden" id="search-fields">
3
3
  <div class="input-group flex-nowrap">
4
- <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
4
+ <input autocomplete="off" type="text" class="form-control" placeholder="{{tx("global:search")}}" name="query" value="">
5
5
 
6
- <a href="{config.relative_path}/search" class="btn btn-outline-secondary" aria-label="[[search:type-to-search]]">
6
+ <a href="{config.relative_path}/search" class="btn btn-outline-secondary" aria-label="{{tx("search:type-to-search")}}">
7
7
  <i class="fa fa-gears fa-fw"></i>
8
8
  </a>
9
9
  </div>
@@ -17,8 +17,8 @@
17
17
  <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
18
18
  <div class="quick-search-results-container"></div>
19
19
  </div>
20
- <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
20
+ <button type="submit" class="btn btn-outline-secondary hide">{{tx("global:search")}}</button>
21
21
  </div>
22
22
 
23
- <div class="nav-item" title="[[global:search]]"><a component="search/button" id="search-button" href="#" class="nav-link" aria-label="[[global:search]]"><i class="fa fa-search fa-fw"></i></a></div>
23
+ <div class="nav-item" title="{{tx("global:search")}}"><a component="search/button" id="search-button" href="#" class="nav-link" aria-label="{{tx("global:search")}}"><i class="fa fa-search fa-fw"></i></a></div>
24
24
  </form>
@@ -1,4 +1,4 @@
1
- <li id="user_label" class="nav-item dropdown px-3" title="[[global:header.profile]]">
1
+ <li id="user_label" class="nav-item dropdown px-3" title="{{tx("global:header.profile")}}">
2
2
  <a href="#" for="user-control-list-check" data-bs-toggle="dropdown" id="user_dropdown" role="button" component="header/avatar" aria-haspopup="true" aria-expanded="false">
3
3
  {{buildAvatar(user, "32px", true)}}
4
4
  <span id="user-header-name" class="d-block d-sm-none">{user.username}</span>
@@ -6,83 +6,83 @@
6
6
  <input type="checkbox" class="hidden" id="user-control-list-check" aria-hidden="true">
7
7
  <ul id="user-control-list" component="header/usercontrol" class="overscroll-behavior-contain user-dropdown dropdown-menu dropdown-menu-end shadow p-1 text-sm ff-base" role="menu">
8
8
  <li>
9
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink" href="{relative_path}/user/{user.userslug}" role="menuitem" aria-label="[[user:profile]]">
10
- <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">[[global:{user.status}]]</span></span>
9
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink" href="{relative_path}/user/{user.userslug}" role="menuitem" aria-label="{{tx("user:profile")}}">
10
+ <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">{{tx(concat("global:", user.status))}}</span></span>
11
11
  <span class="fw-semibold" component="header/username">{user.username}</span>
12
12
  </a>
13
13
  </li>
14
14
  <li role="presentation" class="dropdown-divider"></li>
15
- <li><h6 class="dropdown-header text-xs">[[global:status]]</h6></li>
15
+ <li><h6 class="dropdown-header text-xs">{{tx("global:status")}}</h6></li>
16
16
  <li>
17
17
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.online }}}selected{{{ end }}}" data-status="online" role="menuitem">
18
18
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status online"></span>
19
- <span class="flex-grow-1">[[global:online]]</span>
19
+ <span class="flex-grow-1">{{tx("global:online")}}</span>
20
20
  </a>
21
21
  </li>
22
22
  <li>
23
23
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.away }}}selected{{{ end }}}" data-status="away" role="menuitem">
24
24
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status away"></span>
25
- <span class="flex-grow-1">[[global:away]]</span>
25
+ <span class="flex-grow-1">{{tx("global:away")}}</span>
26
26
  </a>
27
27
  </li>
28
28
  <li>
29
29
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd" role="menuitem">
30
30
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status dnd"></span>
31
- <span class="flex-grow-1">[[global:dnd]]</span>
31
+ <span class="flex-grow-1">{{tx("global:dnd")}}</span>
32
32
  </a>
33
33
  </li>
34
34
  <li>
35
35
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.offline }}}selected{{{ end }}}" data-status="offline" role="menuitem">
36
36
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status offline"></span>
37
- <span class="flex-grow-1">[[global:invisible]]</span>
37
+ <span class="flex-grow-1">{{tx("global:invisible")}}</span>
38
38
  </a>
39
39
  </li>
40
40
  <li role="presentation" class="dropdown-divider"></li>
41
41
  <li>
42
42
  <a class="dropdown-item" href="{relative_path}/user/{user.userslug}/bookmarks" role="menuitem">
43
- <i class="fa fa-fw fa-bookmark"></i> <span>[[user:bookmarks]]</span>
43
+ <i class="fa fa-fw fa-bookmark"></i> <span>{{tx("user:bookmarks")}}</span>
44
44
  </a>
45
45
  </li>
46
46
  <li>
47
47
  <a class="dropdown-item" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit" role="menuitem">
48
- <i class="fa fa-fw fa-edit"></i> <span>[[user:edit-profile]]</span>
48
+ <i class="fa fa-fw fa-edit"></i> <span>{{tx("user:edit-profile")}}</span>
49
49
  </a>
50
50
  </li>
51
51
  <li>
52
52
  <a class="dropdown-item" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
53
- <i class="fa fa-fw fa-gear"></i> <span>[[user:settings]]</span>
53
+ <i class="fa fa-fw fa-gear"></i> <span>{{tx("user:settings")}}</span>
54
54
  </a>
55
55
  </li>
56
56
  {{{ if showModMenu }}}
57
57
  <li role="presentation" class="dropdown-divider"></li>
58
- <li><h6 class="dropdown-header">[[pages:moderator-tools]]</h6></li>
58
+ <li><h6 class="dropdown-header">{{tx("pages:moderator-tools")}}</h6></li>
59
59
  <li>
60
60
  <a class="dropdown-item" href="{relative_path}/flags" role="menuitem">
61
- <i class="fa fa-fw fa-flag"></i> <span>[[pages:flagged-content]]</span>
61
+ <i class="fa fa-fw fa-flag"></i> <span>{{tx("pages:flagged-content")}}</span>
62
62
  </a>
63
63
  </li>
64
64
  <li>
65
65
  <a class="dropdown-item" href="{relative_path}/post-queue" role="menuitem">
66
- <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
66
+ <i class="fa fa-fw fa-list-alt"></i> <span>{{tx("pages:post-queue")}}</span>
67
67
  </a>
68
68
  </li>
69
69
  {{{ if registrationQueueEnabled }}}
70
70
  <li>
71
71
  <a class="dropdown-item" href="{relative_path}/registration-queue" role="menuitem">
72
- <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:registration-queue]]</span>
72
+ <i class="fa fa-fw fa-list-alt"></i> <span>{{tx("pages:registration-queue")}}</span>
73
73
  </a>
74
74
  </li>
75
75
  {{{ end }}}
76
76
  <li>
77
77
  <a class="dropdown-item" href="{relative_path}/ip-blacklist" role="menuitem">
78
- <i class="fa fa-fw fa-ban"></i> <span>[[pages:ip-blacklist]]</span>
78
+ <i class="fa fa-fw fa-ban"></i> <span>{{tx("pages:ip-blacklist")}}</span>
79
79
  </a>
80
80
  </li>
81
81
  {{{ else }}}
82
82
  {{{ if postQueueEnabled }}}
83
83
  <li>
84
84
  <a class="dropdown-item" href="{relative_path}/post-queue" role="menuitem">
85
- <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
85
+ <i class="fa fa-fw fa-list-alt"></i> <span>{{tx("pages:post-queue")}}</span>
86
86
  </a>
87
87
  </li>
88
88
  {{{ end }}}
@@ -94,7 +94,7 @@
94
94
  <input type="hidden" name="_csrf" value="{config.csrf_token}">
95
95
  <input type="hidden" name="noscript" value="true">
96
96
  <button type="submit" class="dropdown-item" role="menuitem">
97
- <i class="fa fa-fw fa-sign-out"></i><span> [[global:logout]]</span>
97
+ <i class="fa fa-fw fa-sign-out"></i><span> {{tx("global:logout")}}</span>
98
98
  </button>
99
99
  </form>
100
100
  </li>
@@ -20,8 +20,8 @@
20
20
  {{{ if (config.searchEnabled && user.privileges.search:content) }}}
21
21
  <div class="navbar-search visible-xs">
22
22
  <form action="{config.relative_path}/search" method="GET">
23
- <button type="button" class="btn btn-link"><i class="fa fa-lg fa-fw fa-search" title="[[global:header.search]]"></i></button>
24
- <input autocomplete="off" type="text" class="form-control hidden" name="term" placeholder="[[global:search]]"/>
23
+ <button type="button" class="btn btn-link"><i class="fa fa-lg fa-fw fa-search" title="{{tx("global:header.search")}}"></i></button>
24
+ <input autocomplete="off" type="text" class="form-control hidden" name="term" placeholder="{{tx("global:search")}}"/>
25
25
  <button class="btn btn-primary hidden" type="submit"></button>
26
26
  <input type="text" class="hidden" name="in" value="{config.searchDefaultInQuick}" />
27
27
  </form>
@@ -54,7 +54,7 @@
54
54
  <i class="fa fa-fw {navigation.iconClass}" data-content="{./content}"></i>
55
55
  {{{ end }}}
56
56
  {{{ if ./text }}}
57
- <span class="{./textClass}">{tx(./text)}</span>
57
+ <span class="{./textClass}">{{tx(./text)}}</span>
58
58
  {{{ end }}}
59
59
  {{{ if navigation.dropdown}}}
60
60
  <i class="fa fa-caret-down"></i>
@@ -71,7 +71,7 @@
71
71
  </ul>
72
72
  <ul class="navbar-nav mb-2 mb-lg-0 hidden-xs">
73
73
  <li class="nav-item">
74
- <a href="#" id="reconnect" class="nav-link hide" title="[[global:reconnecting-message, {config.siteTitle}]]">
74
+ <a href="#" id="reconnect" class="nav-link hide" title="{{tx("global:reconnecting-message", config.siteTitle)}}">
75
75
  <i class="fa fa-check"></i>
76
76
  </a>
77
77
  </li>
@@ -85,12 +85,12 @@
85
85
  {{{ if !maintenanceHeader }}}
86
86
  {{{ if config.loggedIn }}}
87
87
  <ul id="logged-in-menu" class="navbar-nav me-0 mb-2 mb-lg-0 align-items-center">
88
- <li class="nav-item notifications dropdown d-none d-sm-block" component="notifications" title="[[global:header.notifications]]">
88
+ <li class="nav-item notifications dropdown d-none d-sm-block" component="notifications" title="{{tx("global:header.notifications")}}">
89
89
  <!-- IMPORT partials/header/notifications.tpl -->
90
90
  </li>
91
91
 
92
92
  {{{ if canChat }}}
93
- <li class="nav-item chats dropdown" title="[[global:header.chats]]">
93
+ <li class="nav-item chats dropdown" title="{{tx("global:header.chats")}}">
94
94
  <!-- IMPORT partials/header/chats.tpl -->
95
95
  </li>
96
96
  {{{ end }}}
@@ -103,14 +103,14 @@
103
103
  <li class="nav-item">
104
104
  <a class="nav-link" href="{relative_path}/register">
105
105
  <i class="fa fa-pencil fa-fw d-inline-block d-sm-none"></i>
106
- <span>[[global:register]]</span>
106
+ <span>{{tx("global:register")}}</span>
107
107
  </a>
108
108
  </li>
109
109
  {{{ end }}}
110
110
  <li class="nav-item">
111
111
  <a class="nav-link" href="{relative_path}/login">
112
112
  <i class="fa fa-sign-in fa-fw d-inline-block d-sm-none"></i>
113
- <span>[[global:login]]</span>
113
+ <span>{{tx("global:login")}}</span>
114
114
  </a>
115
115
  </li>
116
116
  </ul>
@@ -120,7 +120,7 @@
120
120
  <li class="nav-item">
121
121
  <a href="{relative_path}/login">
122
122
  <i class="fa fa-sign-in fa-fw d-block d-sm-none"></i>
123
- <span>[[global:login]]</span>
123
+ <span>{{tx("global:login")}}</span>
124
124
  </a>
125
125
  </li>
126
126
  </ul>
@@ -1,7 +1,7 @@
1
1
  {{{ if !notifications.length }}}
2
2
  <div class="no-notifs text-center p-4 d-flex flex-column">
3
3
  <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
4
- <div class="text-xs fw-semibold text-muted">[[notifications:no-notifs]]</div>
4
+ <div class="text-xs fw-semibold text-muted">{{tx("notifications:no-notifs")}}</div>
5
5
  </div>
6
6
  {{{ end }}}
7
7
 
@@ -38,8 +38,8 @@
38
38
  <div>
39
39
  {{{ if ./nid }}}
40
40
  <button class="mark-read btn btn-ghost btn-sm d-flex align-items-center justify-content-center flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
41
- <i class="lh-1 unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-read]]"></i>
42
- <i class="lh-1 read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-unread]]"></i>
41
+ <i class="lh-1 unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}" aria-label="{{tx("unread:mark-as-read")}}"></i>
42
+ <i class="lh-1 read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}" aria-label="{{tx("unread:mark-as-unread")}}"></i>
43
43
  </button>
44
44
  {{{ end }}}
45
45
  </div>