nodebb-theme-harmony 3.0.15 → 3.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 (76) hide show
  1. package/package.json +2 -2
  2. package/templates/account/blocks.tpl +6 -6
  3. package/templates/account/categories.tpl +9 -9
  4. package/templates/account/consent.tpl +21 -21
  5. package/templates/account/edit/password.tpl +8 -8
  6. package/templates/account/edit/username.tpl +6 -6
  7. package/templates/account/edit.tpl +22 -22
  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 +33 -33
  12. package/templates/account/posts.tpl +7 -7
  13. package/templates/account/profile.tpl +7 -7
  14. package/templates/account/sessions.tpl +1 -1
  15. package/templates/account/settings.tpl +55 -55
  16. package/templates/account/shares.tpl +1 -1
  17. package/templates/account/theme.tpl +15 -16
  18. package/templates/account/topics.tpl +6 -6
  19. package/templates/account/uploads.tpl +3 -3
  20. package/templates/admin/plugins/harmony.tpl +14 -14
  21. package/templates/category.tpl +7 -7
  22. package/templates/header.tpl +1 -1
  23. package/templates/notifications.tpl +1 -1
  24. package/templates/partials/account/admin-menu.tpl +8 -8
  25. package/templates/partials/account/header.tpl +12 -10
  26. package/templates/partials/account/session-list.tpl +3 -3
  27. package/templates/partials/account/sidebar-left.tpl +18 -18
  28. package/templates/partials/buttons/newTopic.tpl +1 -1
  29. package/templates/partials/categories/item.tpl +2 -2
  30. package/templates/partials/categories/lastpost.tpl +4 -4
  31. package/templates/partials/category/subcategory.tpl +2 -2
  32. package/templates/partials/header/brand.tpl +2 -2
  33. package/templates/partials/mobile-nav.tpl +2 -2
  34. package/templates/partials/notifications_list.tpl +3 -3
  35. package/templates/partials/paginator.tpl +10 -10
  36. package/templates/partials/posts_list_item.tpl +2 -2
  37. package/templates/partials/quick-category-search-results.tpl +4 -4
  38. package/templates/partials/quick-search-results.tpl +4 -4
  39. package/templates/partials/sidebar/chats.tpl +5 -5
  40. package/templates/partials/sidebar/drafts.tpl +3 -3
  41. package/templates/partials/sidebar/logged-in-menu.tpl +4 -4
  42. package/templates/partials/sidebar/logged-out-menu.tpl +10 -10
  43. package/templates/partials/sidebar/notifications.tpl +5 -5
  44. package/templates/partials/sidebar/search-mobile.tpl +5 -5
  45. package/templates/partials/sidebar/search.tpl +5 -5
  46. package/templates/partials/sidebar/user-menu.tpl +20 -20
  47. package/templates/partials/sidebar-left.tpl +2 -2
  48. package/templates/partials/skin-switcher.tpl +3 -3
  49. package/templates/partials/topic/crosspost.tpl +2 -2
  50. package/templates/partials/topic/event.tpl +3 -3
  51. package/templates/partials/topic/mark-unread.tpl +1 -1
  52. package/templates/partials/topic/navigation-post.tpl +1 -1
  53. package/templates/partials/topic/navigator-mobile.tpl +4 -4
  54. package/templates/partials/topic/post-editor.tpl +1 -1
  55. package/templates/partials/topic/post-menu.tpl +1 -1
  56. package/templates/partials/topic/post.tpl +19 -19
  57. package/templates/partials/topic/quickreply.tpl +7 -5
  58. package/templates/partials/topic/reply-button.tpl +5 -5
  59. package/templates/partials/topic/selection-tooltip.tpl +1 -1
  60. package/templates/partials/topic/sort.tpl +4 -4
  61. package/templates/partials/topic/stats.tpl +11 -11
  62. package/templates/partials/topic/tools.tpl +1 -1
  63. package/templates/partials/topic/watch.tpl +9 -9
  64. package/templates/partials/topic-list-bar.tpl +12 -12
  65. package/templates/partials/topics_list.tpl +14 -14
  66. package/templates/partials/users_list_menu.tpl +6 -6
  67. package/templates/popular.tpl +1 -1
  68. package/templates/recent.tpl +3 -3
  69. package/templates/tag.tpl +2 -2
  70. package/templates/tags.tpl +3 -3
  71. package/templates/top.tpl +1 -1
  72. package/templates/topic.tpl +5 -5
  73. package/templates/unread.tpl +2 -2
  74. package/templates/users.tpl +4 -4
  75. package/templates/world.tpl +9 -9
  76. package/templates/partials/topic/post-placeholder.tpl +0 -15
@@ -30,10 +30,10 @@
30
30
  {{{ end }}}
31
31
 
32
32
  <div class="sidebar-toggle m-2 d-none d-lg-block">
33
- <a href="#" role="button" component="sidebar/toggle" class="nav-link d-flex gap-2 align-items-center p-2 pointer w-100 text-nowrap" title="[[themes/harmony:expand]]" aria-label="[[themes/harmony:sidebar-toggle]]">
33
+ <a href="#" role="button" component="sidebar/toggle" class="nav-link d-flex gap-2 align-items-center p-2 pointer w-100 text-nowrap" title="{{tx("themes/harmony:expand")}}" aria-label="{{tx("themes/harmony:sidebar-toggle")}}">
34
34
  <i class="fa fa-fw fa-angles-right"></i>
35
35
  <i class="fa fa-fw fa-angles-left"></i>
36
- <span class="nav-text visible-open fw-semibold small lh-1">[[themes/harmony:collapse]]</span>
36
+ <span class="nav-text visible-open fw-semibold small lh-1">{{tx("themes/harmony:collapse")}}</span>
37
37
  </a>
38
38
  </div>
39
39
  </div>
@@ -5,7 +5,7 @@
5
5
  <span>
6
6
  <i component="skinSwitcher/icon" class="fa fa-fw fa-paintbrush"></i>
7
7
  </span>
8
- <span class="nav-text small visible-open fw-semibold">[[themes/harmony:skins]]</span>
8
+ <span class="nav-text small visible-open fw-semibold">{{tx("themes/harmony:skins")}}</span>
9
9
  </span>
10
10
  </span>
11
11
  </a>
@@ -13,7 +13,7 @@
13
13
  <ul class="dropdown-menu p-1 text-sm overflow-auto p-1" role="menu">
14
14
  <div class="d-flex">
15
15
  <div>
16
- <li class="dropdown-header">[[themes/harmony:light]]</li>
16
+ <li class="dropdown-header">{{tx("themes/harmony:light")}}</li>
17
17
  <div class="d-grid" style="grid-template-columns: 1fr 1fr;">
18
18
  {{{ each bootswatchSkinOptions.light }}}
19
19
  <li>
@@ -23,7 +23,7 @@
23
23
  </div>
24
24
  </div>
25
25
  <div>
26
- <li class="dropdown-header">[[themes/harmony:dark]]</li>
26
+ <li class="dropdown-header">{{tx("themes/harmony:dark")}}</li>
27
27
  {{{ each bootswatchSkinOptions.dark }}}
28
28
  <li>
29
29
  <a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
@@ -1,6 +1,6 @@
1
1
  {{{ if loggedIn }}}
2
- <button component="topic/crosspost" title="[[topic:crosspost-topic]]" class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center text-truncate">
2
+ <button component="topic/crosspost" title="{{tx("topic:crosspost-topic")}}" class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center text-truncate">
3
3
  <i class="fa fa-fw fa-square-arrow-up-right text-primary"></i>
4
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:thread-tools.crosspost]]</span>
4
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:thread-tools.crosspost")}}</span>
5
5
  </button>
6
6
  {{{ end }}}
@@ -5,7 +5,7 @@
5
5
  </div>
6
6
  <div class="d-flex flex-column align-items-start">
7
7
  <button class="btn btn-sm btn-ghost" type="button" data-bs-toggle="collapse" data-bs-target="#event-collapse-{./id}" aria-expanded="false" aria-controls="collapseExample">
8
- [[topic:announcers-x, {./items.length}]]
8
+ {{tx("topic:announcers-x", ./items.length)}}
9
9
  </button>
10
10
  <div class="collapse align-self-start" id="event-collapse-{./id}">
11
11
  <div component="topic/event/items">
@@ -15,7 +15,7 @@
15
15
  {{./text}}
16
16
  </span>
17
17
  {{{ if (privileges.isAdminOrMod && ./id) }}}
18
- <span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
18
+ <span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="{{tx("topic:delete-event")}}"><i class="fa fa-trash"></i></span>
19
19
  {{{ end }}}
20
20
  </div>
21
21
  {{{ end }}}
@@ -33,7 +33,7 @@
33
33
  {{./text}}
34
34
  </span>
35
35
  {{{ if (privileges.isAdminOrMod && ./id) }}}
36
- <span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
36
+ <span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="{{tx("topic:delete-event")}}"><i class="fa fa-trash"></i></span>
37
37
  {{{ end }}}
38
38
  </li>
39
39
  {{{ end }}}
@@ -1,6 +1,6 @@
1
1
  {{{ if loggedIn }}}
2
2
  <button component="topic/mark-unread" class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center">
3
3
  <i class="fa fa-fw fa-inbox text-primary"></i>
4
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:mark-unread]]</span>
4
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:mark-unread")}}</span>
5
5
  </button>
6
6
  {{{ end }}}
@@ -8,4 +8,4 @@
8
8
  <span class="timeago text-nowrap text-muted" title="{post.timestampISO}"></span>
9
9
  </div>
10
10
 
11
- <div class="text-sm">{{{ if post.txContent }}}{{tx(posts.content)}}{{{ else }}}{{txEscape(post.content)}}{{{ end }}}</div>
11
+ <div class="text-sm">{{{ if post.txContent }}}{{tx(posts.content)}}{{{ else }}}{{post.content}}{{{ end }}}</div>
@@ -36,23 +36,23 @@
36
36
  <div class="col-8 post-content overflow-hidden mb-3" style="height: 350px;"></div>
37
37
  <div class="col-4 ps-0 text-end">
38
38
  <div class="scroller-content">
39
- <span class="pointer pagetop">[[topic:first-post]] <i class="fa fa-angle-double-up"></i></span>
39
+ <span class="pointer pagetop">{{tx("topic:first-post")}} <i class="fa fa-angle-double-up"></i></span>
40
40
  <div class="scroller-container border-gray-200" style="height: 300px;">
41
41
  <div class="scroller-thumb position-relative text-nowrap" style="height: 40px;">
42
42
  <span class="thumb-text text-sm fw-bold user-select-none position-relative pe-2" style="top: -15px;"></span>
43
43
  <div class="rounded-2 scroller-thumb-icon bg-primary d-inline-block position-relative" style="width: 9px; height:40px;"></div>
44
44
  </div>
45
45
  </div>
46
- <span class="pointer pagebottom">[[topic:last-post]] <i class="fa fa-angle-double-down"></i></span>
46
+ <span class="pointer pagebottom">{{tx("topic:last-post")}} <i class="fa fa-angle-double-down"></i></span>
47
47
  </div>
48
48
  </div>
49
49
  </div>
50
50
  <div class="row">
51
51
  <div class="col-6">
52
- <button id="myNextPostBtn" class="btn btn-sm btn-ghost border form-control text-truncate" disabled>[[topic:go-to-my-next-post]]</button>
52
+ <button id="myNextPostBtn" class="btn btn-sm btn-ghost border form-control text-truncate" disabled>{{tx("topic:go-to-my-next-post")}}</button>
53
53
  </div>
54
54
  <div class="col-6">
55
- <input type="number" class="form-control form-control-sm" id="indexInput" placeholder="[[global:pagination.enter-index]]">
55
+ <input type="number" class="form-control form-control-sm" id="indexInput" placeholder="{{tx("global:pagination.enter-index")}}">
56
56
  </div>
57
57
  </div>
58
58
  </li>
@@ -1 +1 @@
1
- <span data-editor="{editor.userslug}" component="post/editor" class="visually-hidden">[[global:last-edited-by, {editor.username}]] <span class="timeago" title="{isoTimeToLocaleString(editedISO, config.userLang)}"></span></span>
1
+ <span data-editor="{editor.userslug}" component="post/editor" class="visually-hidden">{{tx("global:last-edited-by", txEscape(editor.username))}} <span class="timeago" title="{isoTimeToLocaleString(editedISO, config.userLang)}"></span></span>
@@ -1,4 +1,4 @@
1
1
  <span component="post/tools" class="dropdown bottom-sheet {{{ if !./display_post_menu }}}hidden{{{ end }}}">
2
- <a class="btn btn-ghost btn-sm ff-secondary dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:post-tools]]"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
2
+ <a class="btn btn-ghost btn-sm ff-secondary dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{tx("topic:post-tools")}}"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
3
3
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu"></ul>
4
4
  </span>
@@ -10,13 +10,13 @@
10
10
  {{{ end }}}
11
11
  <div class="d-flex align-items-start gap-3 post-container-parent">
12
12
  <div class="bg-body d-none d-sm-block rounded-circle" style="box-shadow: 0 0 0 3px var(--bs-body-bg);">
13
- <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" aria-label="[[aria:profile-page-for, {./user.displayname}]]">
13
+ <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" aria-label="{{tx("aria:profile-page-for", txEscape(./user.displayname))}}">
14
14
  {{buildAvatar(posts.user, "48px", true, "", "user/picture")}}
15
15
  {{{ if ./user.isLocal }}}
16
- <span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
16
+ <span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">{{tx(concat("global:", posts.user.status))}}</span></span>
17
17
  {{{ else }}}
18
- <span component="user/locality" class="position-absolute top-100 start-100 lh-1 border border-white border-2 rounded-circle small" title="[[global:remote-user]]">
19
- <span class="visually-hidden">[[global:remote-user]]</span>
18
+ <span component="user/locality" class="position-absolute top-100 start-100 lh-1 border border-white border-2 rounded-circle small" title="{{tx("global:remote-user")}}">
19
+ <span class="visually-hidden">{{tx("global:remote-user")}}</span>
20
20
  <i class="fa fa-globe fa-width-auto"></i>
21
21
  </span>
22
22
  {{{ end }}}
@@ -33,10 +33,10 @@
33
33
  <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
34
34
  {{buildAvatar(posts.user, "20px", true, "", "user/picture")}}
35
35
  {{{ if ./user.isLocal }}}
36
- <span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
36
+ <span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">{{tx(concat("global:", posts.user.status))}}</span></span>
37
37
  {{{ else }}}
38
- <span component="user/locality" class="position-absolute top-100 start-100 lh-1 border border-white border-2 rounded-circle small" title="[[global:remote-user]]">
39
- <span class="visually-hidden">[[global:remote-user]]</span>
38
+ <span component="user/locality" class="position-absolute top-100 start-100 lh-1 border border-white border-2 rounded-circle small" title="{{tx("global:remote-user")}}">
39
+ <span class="visually-hidden">{{tx("global:remote-user")}}</span>
40
40
  <i class="fa fa-globe fa-width-auto"></i>
41
41
  </span>
42
42
  {{{ end }}}
@@ -53,14 +53,14 @@
53
53
  {{{ end }}}
54
54
 
55
55
  {{{ if posts.user.banned }}}
56
- <span class="badge bg-danger rounded-1">[[user:banned]]</span>
56
+ <span class="badge bg-danger rounded-1">{{tx("user:banned")}}</span>
57
57
  {{{ end }}}
58
58
 
59
59
  <div class="d-flex gap-1 align-items-center">
60
60
  <span class="text-muted">{{generateWrote(@value, config.timeagoCutoff)}}</span>
61
61
 
62
- <i component="post/edit-indicator" class="fa fa-edit text-muted{{{ if privileges.posts:history }}} pointer{{{ end }}} edit-icon {{{ if !posts.editor.username }}}hidden{{{ end }}}" title="[[global:edited-timestamp, {isoTimeToLocaleString(./editedISO, config.userLang)}]]"></i>
63
- <span data-editor="{posts.editor.userslug}" component="post/editor" class="visually-hidden">[[global:last-edited-by, {posts.editor.username}]] <span class="timeago" title="{isoTimeToLocaleString(posts.editedISO, config.userLang)}"></span></span>
62
+ <i component="post/edit-indicator" class="fa fa-edit text-muted{{{ if privileges.posts:history }}} pointer{{{ end }}} edit-icon {{{ if !posts.editor.username }}}hidden{{{ end }}}" title="{{tx("global:edited-timestamp", isoTimeToLocaleString(./editedISO, config.userLang))}}"></i>
63
+ <span data-editor="{posts.editor.userslug}" component="post/editor" class="visually-hidden">{{tx("global:last-edited-by", txEscape(posts.editor.username))}} <span class="timeago" title="{{isoTimeToLocaleString(posts.editedISO, config.userLang)}}"></span></span>
64
64
  </div>
65
65
 
66
66
  {{{ if posts.user.custom_profile_info.length }}}
@@ -78,12 +78,12 @@
78
78
  </div>
79
79
 
80
80
  <div class="content text-break" component="post/content" itemprop="text">
81
- {{{ if posts.txContent }}}{{tx(posts.content)}}{{{ else }}}{{txEscape(posts.content)}}{{{ end }}}
81
+ {{{ if posts.txContent }}}{{tx(posts.content)}}{{{ else }}}{{posts.content}}{{{ end }}}
82
82
  </div>
83
83
 
84
84
  <div component="post/footer" class="post-footer border-bottom pb-2">
85
85
  {{{ if posts.user.signature }}}
86
- <div component="post/signature" data-uid="{posts.user.uid}" class="text-xs text-muted mt-2">{{txEscape(posts.user.signature)}}</div>
86
+ <div component="post/signature" data-uid="{posts.user.uid}" class="text-xs text-muted mt-2">{{posts.user.signature}}</div>
87
87
  {{{ end }}}
88
88
 
89
89
  <div class="d-flex flex-wrap-reverse gap-2 {{{ if (hideReplies || !posts.replies.count) }}}justify-content-end{{{ else }}}justify-content-between{{{ end }}}">
@@ -99,32 +99,32 @@
99
99
  </span>
100
100
 
101
101
  <span class="ms-2 replies-count fw-semibold text-nowrap" component="post/reply-count/text" data-replies="{posts.replies.count}">{{tx(posts.replies.text)}}</span>
102
- <span class="ms-2 replies-last hidden-xs fw-semibold">[[topic:last-reply-time]] <span class="timeago" title="{posts.replies.timestampISO}"></span></span>
102
+ <span class="ms-2 replies-last hidden-xs fw-semibold">{{tx("topic:last-reply-time")}} <span class="timeago" title="{{isoTimeToLocaleString(posts.replies.timestampISO, config.userLang)}}"></span></span>
103
103
 
104
104
  <i class="fa fa-fw fa-chevron-down" component="post/replies/open"></i>
105
105
  </a>
106
106
  {{{ end }}}
107
107
  <div component="post/actions" class="d-flex flex-grow-1 align-items-center justify-content-end gap-1 post-tools">
108
108
  <!-- IMPORT partials/topic/reactions.tpl -->
109
- <a component="post/reply" href="#" class="btn btn-ghost btn-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:reply]]"><i class="fa fa-fw fa-reply text-primary"></i></a>
110
- <a component="post/quote" href="#" class="btn btn-ghost btn-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:quote]]"><i class="fa fa-fw fa-quote-right text-primary"></i></a>
109
+ <a component="post/reply" href="#" class="btn btn-ghost btn-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="{{tx("topic:reply")}}"><i class="fa fa-fw fa-reply text-primary"></i></a>
110
+ <a component="post/quote" href="#" class="btn btn-ghost btn-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="{{tx("topic:quote")}}"><i class="fa fa-fw fa-quote-right text-primary"></i></a>
111
111
 
112
112
  {{{ if ./announces }}}
113
- <a component="post/announce-count" href="#" class="btn btn-ghost btn-sm d-flex gap-2 align-items-center" title="[[topic:announcers]]"><i class="fa fa-share-alt text-primary"></i> {./announces}</a>
113
+ <a component="post/announce-count" href="#" class="btn btn-ghost btn-sm d-flex gap-2 align-items-center" title="{{tx("topic:announcers")}}"><i class="fa fa-share-alt text-primary"></i> {./announces}</a>
114
114
  {{{ end }}}
115
115
 
116
116
  {{{ if !reputation:disabled }}}
117
117
  <div class="d-flex votes align-items-center">
118
- <a component="post/upvote" href="#" class="btn btn-ghost btn-sm{{{ if posts.upvoted }}} upvoted{{{ end }}}" title="[[topic:upvote-post]]">
118
+ <a component="post/upvote" href="#" class="btn btn-ghost btn-sm{{{ if posts.upvoted }}} upvoted{{{ end }}}" title="{{tx("topic:upvote-post")}}">
119
119
  <i class="fa fa-fw fa-chevron-up text-primary"></i>
120
120
  </a>
121
121
 
122
122
  <meta itemprop="upvoteCount" content="{posts.upvotes}">
123
123
  <meta itemprop="downvoteCount" content="{posts.downvotes}">
124
- <a href="#" class="px-2 mx-1 btn btn-ghost btn-sm" component="post/vote-count" data-votes="{posts.votes}" title="[[global:voters]]">{posts.votes}</a>
124
+ <a href="#" class="px-2 mx-1 btn btn-ghost btn-sm" component="post/vote-count" data-votes="{posts.votes}" title="{{tx("global:voters")}}">{posts.votes}</a>
125
125
 
126
126
  {{{ if !downvote:disabled }}}
127
- <a component="post/downvote" href="#" class="btn btn-ghost btn-sm{{{ if posts.downvoted }}} downvoted{{{ end }}}" title="[[topic:downvote-post]]">
127
+ <a component="post/downvote" href="#" class="btn btn-ghost btn-sm{{{ if posts.downvoted }}} downvoted{{{ end }}}" title="{{tx("topic:downvote-post")}}">
128
128
  <i class="fa fa-fw fa-chevron-down text-primary"></i>
129
129
  </a>
130
130
  {{{ end }}}
@@ -3,15 +3,15 @@
3
3
  <div class="icon hidden-xs">
4
4
  <a class="d-inline-block position-relative" href="{{{ if loggedInUser.userslug }}}{config.relative_path}/user/{loggedInUser.userslug}{{{ else }}}#{{{ end }}}">
5
5
  {{buildAvatar(loggedInUser, "48px", true, "", "user/picture")}}
6
- {{{ if loggedInUser.status }}}<span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {loggedInUser.status}"><span class="visually-hidden">[[global:{loggedInUser.status}]]</span></span>{{{ end }}}
6
+ {{{ if loggedInUser.status }}}<span component="user/status" class="position-absolute top-100 start-100 border border-white border-2 rounded-circle status {loggedInUser.status}"><span class="visually-hidden">{{tx(concat("global:", loggedInUser.status))}}</span></span>{{{ end }}}
7
7
  </a>
8
8
  </div>
9
9
  <form class="flex-grow-1 d-flex flex-column gap-2" method="post" action="{config.relative_path}/compose">
10
10
  <input type="hidden" name="tid" value="{tid}" />
11
11
  <input type="hidden" name="_csrf" value="{config.csrf_token}" />
12
12
  <div class="quickreply-message position-relative">
13
- <textarea rows="4" name="content" component="topic/quickreply/text" class="form-control mousetrap" placeholder="[[modules:composer.textarea.placeholder]]"></textarea>
14
- <div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
13
+ <textarea rows="4" name="content" component="topic/quickreply/text" class="form-control mousetrap" placeholder="{{tx("modules:composer.textarea.placeholder")}}"></textarea>
14
+ <div class="imagedrop"><div>{{tx("topic:composer.drag-and-drop-images")}}</div></div>
15
15
  </div>
16
16
  <div>
17
17
  <div class="d-flex justify-content-end gap-2">
@@ -19,8 +19,10 @@
19
19
  <!-- IMPORT partials/category/selector-dropdown-left.tpl -->
20
20
  </div>
21
21
  <button type="button" component="topic/quickreply/upload/button" class="btn btn-ghost btn-sm border"><i class="fa fa-upload"></i></button>
22
- <button type="button" component="topic/quickreply/expand" class="btn btn-ghost btn-sm border" title="[[topic:open-composer]]"><i class="fa fa-expand"></i></button>
23
- <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-{{{ if tid }}}reply{{{ else }}}create{{{ end }}}]]</button>
22
+ <button type="button" component="topic/quickreply/expand" class="btn btn-ghost btn-sm border" title="{{tx("topic:open-composer")}}"><i class="fa fa-expand"></i></button>
23
+ <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">
24
+ {{{ if tid }}}{{tx("topic:post-quick-reply")}}{{{ else }}}{{tx("topic:post-quick-create")}}{{{ end }}}
25
+ </button>
24
26
  </div>
25
27
  </div>
26
28
  </form>
@@ -1,17 +1,17 @@
1
1
  <div component="topic/reply/container" class="btn-group {{{ if !privileges.topics:reply }}}hidden{{{ end }}}">
2
- <a href="{config.relative_path}/compose?tid={tid}" class="d-flex {{{ if !config.theme.topicSidebarTools}}}px-3{{{ end }}} gap-2 align-items-center btn btn-sm btn-primary fw-semibold" component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-fw fa-reply d-none {{{ if config.theme.topicSidebarTools}}} d-md-block{{{ end }}}"></i><span class="text-truncate text-nowrap">[[topic:reply]]</span></a>
3
- <button type="button" class="btn btn-sm btn-primary dropdown-toggle flex-0" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:reply-options]]">
2
+ <a href="{config.relative_path}/compose?tid={tid}" class="d-flex {{{ if !config.theme.topicSidebarTools}}}px-3{{{ end }}} gap-2 align-items-center btn btn-sm btn-primary fw-semibold" component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-fw fa-reply d-none {{{ if config.theme.topicSidebarTools}}} d-md-block{{{ end }}}"></i><span class="text-truncate text-nowrap">{{{ if tid }}}{{tx("topic:reply")}}{{{ else }}}{{tx("topic:create")}}{{{ end }}}</span></a>
3
+ <button type="button" class="btn btn-sm btn-primary dropdown-toggle flex-0" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{tx("topic:reply-options")}}">
4
4
  <span class="caret"></span>
5
5
  </button>
6
6
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
7
- <li><a class="dropdown-item rounded-1" href="#" component="topic/reply-as-topic" role="menuitem">[[topic:reply-as-topic]]</a></li>
7
+ <li><a class="dropdown-item rounded-1" href="#" component="topic/reply-as-topic" role="menuitem">{{tx("topic:reply-as-topic")}}</a></li>
8
8
  </ul>
9
9
  </div>
10
10
 
11
11
  {{{ if loggedIn }}}
12
- <a href="#" component="topic/reply/locked" class="d-flex gap-2 align-items-center fw-semibold btn btn-sm btn-primary disabled {{{ if (privileges.topics:reply || !locked) }}}hidden{{{ end }}}" disabled><i class="fa fa-fw fa-lock"></i> [[topic:locked]]</a>
12
+ <a href="#" component="topic/reply/locked" class="d-flex gap-2 align-items-center fw-semibold btn btn-sm btn-primary disabled {{{ if (privileges.topics:reply || !locked) }}}hidden{{{ end }}}" disabled><i class="fa fa-fw fa-lock"></i> {{tx("topic:locked")}}</a>
13
13
  {{{ else }}}
14
14
  {{{ if !privileges.topics:reply }}}
15
- <a component="topic/reply/guest" href="{config.relative_path}/login" class="d-flex gap-2 align-items-center fw-semibold btn btn-sm btn-primary"><i class="fa fa-fw fa-sign-in {{{ if !config.theme.topicSidebarTools}}} d-sm-block d-md-none {{{ end }}}"></i><span>[[topic:guest-login-reply]]</span></a>
15
+ <a component="topic/reply/guest" href="{config.relative_path}/login" class="d-flex gap-2 align-items-center fw-semibold btn btn-sm btn-primary"><i class="fa fa-fw fa-sign-in {{{ if !config.theme.topicSidebarTools}}} d-sm-block d-md-none {{{ end }}}"></i><span>{{tx("topic:guest-login-reply")}}</span></a>
16
16
  {{{ end }}}
17
17
  {{{ end }}}
@@ -1,3 +1,3 @@
1
1
  <div component="selection/tooltip" class="selection-tooltip-container position-absolute card card-body p-1 rounded-1 mt-2" style="z-index: 1;">
2
- <button component="selection/tooltip/quote" class="btn btn-sm btn-primary quote-tooltip-btn">[[topic:quote]]</button>
2
+ <button component="selection/tooltip/quote" class="btn btn-sm btn-primary quote-tooltip-btn">{{tx("topic:quote")}}</button>
3
3
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="dropdown bottom-sheet" component="thread/sort">
2
- <button class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle text-truncate w-100" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[aria:post-sort-option, {sortOptionLabel}]]">
2
+ <button class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle text-truncate w-100" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{tx("aria:post-sort-option", sortOptionLabel)}}">
3
3
  <i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
4
4
  <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx(sortOptionLabel)}}</span>
5
5
  </button>
@@ -7,19 +7,19 @@
7
7
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
8
8
  <li>
9
9
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="oldest_to_newest" data-sort="oldest_to_newest" role="menuitem">
10
- <span class="flex-grow-1">[[topic:oldest-to-newest]]</span>
10
+ <span class="flex-grow-1">{{tx("topic:oldest-to-newest")}}</span>
11
11
  <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
12
12
  </a>
13
13
  </li>
14
14
  <li>
15
15
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="newest_to_oldest" data-sort="newest_to_oldest" role="menuitem">
16
- <span class="flex-grow-1">[[topic:newest-to-oldest]]</span>
16
+ <span class="flex-grow-1">{{tx("topic:newest-to-oldest")}}</span>
17
17
  <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
18
18
  </a>
19
19
  </li>
20
20
  <li>
21
21
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="most_votes" data-sort="most_votes" role="menuitem">
22
- <span class="flex-grow-1">[[topic:most-votes]]</span>
22
+ <span class="flex-grow-1">{{tx("topic:most-votes")}}</span>
23
23
  <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
24
24
  </a>
25
25
  </li>
@@ -1,30 +1,30 @@
1
1
  {{{ if ./crossposts.length }}}
2
2
  <span class="badge text-body border border-gray-300 stats text-xs position-relative">
3
- <i class="fa-regular fa-fw fa-clone visible-xs-inline" title="[[global:crossposts]]"></i>
3
+ <i class="fa-regular fa-fw fa-clone visible-xs-inline" title="{{tx("global:crossposts")}}"></i>
4
4
  <span component="topic/crosspost-count" title="{formattedNumber(crossposts.length)}" class="fw-bold">{humanReadableNumber(crossposts.length)}</span>
5
- <span class="hidden-xs text-lowercase fw-normal">[[global:crossposts]]</span>
6
- <a href="#" aria-label="[[aria:show-crossposts]]" id="show-crossposts" class="stretched-link"></a>
5
+ <span class="hidden-xs text-lowercase fw-normal">{{tx("global:crossposts")}}</span>
6
+ <a href="#" aria-label="{{tx("aria:show-crossposts")}}" id="show-crossposts" class="stretched-link"></a>
7
7
  </span>
8
8
  {{{ end }}}
9
9
  <span class="badge text-body border border-gray-300 stats text-xs">
10
- <i class="fa-regular fa-fw fa-message visible-xs-inline" title="[[global:posts]]"></i>
10
+ <i class="fa-regular fa-fw fa-message visible-xs-inline" title="{{tx("global:posts")}}"></i>
11
11
  <span component="topic/post-count" title="{formattedNumber(postcount)}" class="fw-bold">{humanReadableNumber(postcount)}</span>
12
- <span class="hidden-xs text-lowercase fw-normal">[[global:posts]]</span>
12
+ <span class="hidden-xs text-lowercase fw-normal">{{tx("global:posts")}}</span>
13
13
  </span>
14
14
  <span class="badge text-body border border-gray-300 stats text-xs">
15
- <i class="fa fa-fw fa-user visible-xs-inline" title="[[global:posters]]"></i>
15
+ <i class="fa fa-fw fa-user visible-xs-inline" title="{{tx("global:posters")}}"></i>
16
16
  <span title="{formattedNumber(postercount)}" class="fw-bold">{humanReadableNumber(postercount)}</span>
17
- <span class="hidden-xs text-lowercase fw-normal">[[global:posters]]</span>
17
+ <span class="hidden-xs text-lowercase fw-normal">{{tx("global:posters")}}</span>
18
18
  </span>
19
19
  <span class="badge text-body border border-gray-300 stats text-xs">
20
- <i class="fa fa-fw fa-eye visible-xs-inline" title="[[global:views]]"></i>
20
+ <i class="fa fa-fw fa-eye visible-xs-inline" title="{{tx("global:views")}}"></i>
21
21
  <span class="fw-bold" title="{formattedNumber(viewcount)}">{humanReadableNumber(viewcount)}</span>
22
- <span class="hidden-xs text-lowercase fw-normal">[[global:views]]</span>
22
+ <span class="hidden-xs text-lowercase fw-normal">{{tx("global:views")}}</span>
23
23
  </span>
24
24
  {{{ if ./followercount }}}
25
25
  <span class="badge text-body border border-gray-300 stats text-xs">
26
- <i class="fa fa-fw fa-bell-o visible-xs-inline" title="[[global:watching]]"></i>
26
+ <i class="fa fa-fw fa-bell-o visible-xs-inline" title="{{tx("global:watching")}}"></i>
27
27
  <span class="fw-bold" title="{formattedNumber(followercount)}">{humanReadableNumber(followercount)}</span>
28
- <span class="hidden-xs text-lowercase fw-normal">[[global:watching]]</span>
28
+ <span class="hidden-xs text-lowercase fw-normal">{{tx("global:watching")}}</span>
29
29
  </span>
30
30
  {{{ end }}}
@@ -2,7 +2,7 @@
2
2
  <div class="dropdown thread-tools bottom-sheet">
3
3
  <button class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 dropdown-toggle text-truncate w-100" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
4
4
  <i class="fa fa-fw fa-gear text-primary"></i>
5
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:thread-tools.title]]</span>
5
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:thread-tools.title")}}</span>
6
6
  </button>
7
7
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu"></ul>
8
8
  </div>
@@ -3,17 +3,17 @@
3
3
  <button class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 dropdown-toggle text-truncate w-100" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
4
4
  <span component="topic/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="flex-shrink-0 fa fa-fw fa-bell-o text-primary"></i>
6
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:watching]]</span>
6
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:watching")}}</span>
7
7
  </span>
8
8
 
9
9
  <span component="topic/not-following/menu" class="d-flex gap-2 align-items-center{{{ if !isNotFollowing}}} hidden{{{ end }}}">
10
10
  <i class="flex-shrink-0 fa fa-fw fa-bell-slash-o text-primary"></i>
11
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:not-watching]]</span>
11
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:not-watching")}}</span>
12
12
  </span>
13
13
 
14
14
  <span component="topic/ignoring/menu" class="d-flex gap-2 align-items-center{{{ if !isIgnoring }}} hidden{{{ end }}}">
15
15
  <i class="flex-shrink-0 fa fa-fw fa-eye-slash text-primary"></i>
16
- <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">[[topic:ignoring]]</span>
16
+ <span class="d-none d-md-inline fw-semibold text-truncate text-nowrap">{{tx("topic:ignoring")}}</span>
17
17
  </span>
18
18
  </button>
19
19
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
@@ -22,9 +22,9 @@
22
22
  <div class="flex-grow-1 d-flex flex-column">
23
23
  <span class="d-flex align-items-center gap-2">
24
24
  <i class="flex-shrink-0 fa fa-fw fa-bell-o text-secondary"></i>
25
- <span class="flex-grow-1 fw-semibold">[[topic:watching]]</span>
25
+ <span class="flex-grow-1 fw-semibold">{{tx("topic:watching")}}</span>
26
26
  </span>
27
- <div class="help-text text-secondary text-xs">[[topic:watching.description]]</div>
27
+ <div class="help-text text-secondary text-xs">{{tx("topic:watching.description")}}</div>
28
28
  </div>
29
29
  <span class="flex-shrink-0"><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
30
30
  </a>
@@ -35,9 +35,9 @@
35
35
  <div class="flex-grow-1 d-flex flex-column">
36
36
  <span class="d-flex align-items-center gap-2">
37
37
  <i class="flex-shrink-0 fa fa-fw fa-bell-slash-o text-secondary"></i>
38
- <span class="flex-grow-1 fw-semibold">[[topic:not-watching]]</span>
38
+ <span class="flex-grow-1 fw-semibold">{{tx("topic:not-watching")}}</span>
39
39
  </span>
40
- <div class="help-text text-secondary text-xs">[[topic:not-watching.description]]</div>
40
+ <div class="help-text text-secondary text-xs">{{tx("topic:not-watching.description")}}</div>
41
41
  </div>
42
42
  <span class="flex-shrink-0"><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i></span>
43
43
  </a>
@@ -48,9 +48,9 @@
48
48
  <div class="flex-grow-1 d-flex flex-column">
49
49
  <span class="d-flex align-items-center gap-2">
50
50
  <i class="flex-shrink-0 fa fa-fw fa-eye-slash text-secondary"></i>
51
- <span class="flex-grow-1 fw-semibold">[[topic:ignoring]]</span>
51
+ <span class="flex-grow-1 fw-semibold">{{tx("topic:ignoring")}}</span>
52
52
  </span>
53
- <div class="help-text text-secondary text-xs">[[topic:ignoring.description]]</div>
53
+ <div class="help-text text-secondary text-xs">{{tx("topic:ignoring.description")}}</div>
54
54
  </div>
55
55
  <span class="flex-shrink-0"><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i></span>
56
56
  </a>
@@ -35,21 +35,21 @@
35
35
  <span id="sort-label" class="visible-md-inline visible-lg-inline fw-semibold"></span>
36
36
  </button>
37
37
  <ul class="dropdown-menu" id="sort-options">
38
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world">[[world:latest]]</a></li>
39
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?local=1">[[world:latest-local]]</a></li>
40
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?all=1">[[world:latest-all]]</a></li>
41
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=day">[[world:popular-day]]</a></li>
42
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=week">[[world:popular-week]]</a></li>
43
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=month">[[world:popular-month]]</a></li>
44
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=year">[[world:popular-year]]</a></li>
45
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=alltime">[[world:popular-alltime]]</a></li>
38
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world">{{tx("world:latest")}}</a></li>
39
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?local=1">{{tx("world:latest-local")}}</a></li>
40
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?all=1">{{tx("world:latest-all")}}</a></li>
41
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=day">{{tx("world:popular-day")}}</a></li>
42
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=week">{{tx("world:popular-week")}}</a></li>
43
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=month">{{tx("world:popular-month")}}</a></li>
44
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=year">{{tx("world:popular-year")}}</a></li>
45
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=alltime">{{tx("world:popular-alltime")}}</a></li>
46
46
  </ul>
47
47
  </div>
48
48
  {{{ end }}}
49
49
  <div>
50
50
  <a class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center fw-semibold h-100" href="#" id="world-help">
51
51
  <i class="fa fa-fw fa-question text-primary"></i>
52
- <span class="visible-md-inline visible-lg-inline">[[world:help]]</span>
52
+ <span class="visible-md-inline visible-lg-inline">{{tx("world:help")}}</span>
53
53
  </a>
54
54
  </div>
55
55
  {{{ end }}}
@@ -59,14 +59,14 @@
59
59
  {{{ end }}}
60
60
 
61
61
  <a href="{{{ if (template.category || template.world) }}}{url}{{{ else }}}{config.relative_path}/{selectedFilter.url}{querystring}{{{ end }}}" class="btn btn-secondary fw-semibold position-absolute top-100 translate-middle-x start-50 mt-1 hide" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;" id="new-topics-alert">
62
- <i class="fa fa-fw fa-arrow-up"></i> [[recent:load-new-posts]]
62
+ <i class="fa fa-fw fa-arrow-up"></i> {{tx("recent:load-new-posts")}}
63
63
  </a>
64
64
  </div>
65
65
 
66
66
  <div class="d-flex gap-1 align-items-center">
67
67
  {{{ if (template.category || template.world) }}}
68
68
  {{{ if privileges.topics:create }}}
69
- <a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary btn-sm text-nowrap" data-ajaxify="false" role="button">[[category:new-topic-button]]</a>
69
+ <a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary btn-sm text-nowrap" data-ajaxify="false" role="button">{{tx("category:new-topic-button")}}</a>
70
70
  {{{ end }}}
71
71
  {{{ else }}}
72
72
  {{{ if canPost }}}
@@ -75,7 +75,7 @@
75
75
  {{{ end }}}
76
76
  <!-- only show login button if not logged in and doesn't have any posting privilege -->
77
77
  {{{ if (!loggedIn && (!privileges.topics:create && !canPost))}}}
78
- <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-sm btn-primary">[[category:guest-login-post]]</a>
78
+ <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-sm btn-primary">{{tx("category:guest-login-post")}}</a>
79
79
  {{{ end }}}
80
80
  </div>
81
81
  </div>