Language switcher, pwa icons

This commit is contained in:
Ernest Wiśniewski 2023-06-08 14:32:00 +02:00
parent 2857c26ec4
commit aa0aaae65b
35 changed files with 523 additions and 23 deletions

View file

@ -131,4 +131,8 @@ export default class extends ApplicationController {
closeNav(e) {
document.getElementById('sidebar').classList.remove('open');
}
changeLang(event) {
window.location.href = '/settings/theme/kbin_lang/' + event.target.value;
}
}

View file

@ -1,7 +1,12 @@
import {Controller} from '@hotwired/stimulus';
import * as timeago from 'timeago.js';
import pl from 'timeago.js/lib/lang/pl';
import es from 'timeago.js/lib/lang/es';
import fr from 'timeago.js/lib/lang/fr';
import it from 'timeago.js/lib/lang/it';
import ja from 'timeago.js/lib/lang/ja';
import nl from 'timeago.js/lib/lang/nl';
import pl from 'timeago.js/lib/lang/pl';
import pt from 'timeago.js/lib/lang/pt_br';
/* stimulusFetch: 'lazy' */
export default class extends Controller {
@ -9,12 +14,27 @@ export default class extends Controller {
const elems = document.querySelectorAll('.timeago');
if (elems.length) {
if (document.documentElement.lang === 'pl') { // @todo
timeago.register('pl', pl);
timeago.render(document.querySelectorAll('.timeago'), 'pl');
if (document.documentElement.lang === 'es') { // @todo
timeago.register('es', es);
timeago.render(document.querySelectorAll('.timeago'), 'es');
} else if (document.documentElement.lang === 'fr') {
timeago.register('fr', fr);
timeago.render(document.querySelectorAll('.timeago'), 'fr');
} else if (document.documentElement.lang === 'it') {
timeago.register('it', it);
timeago.render(document.querySelectorAll('.timeago'), 'it');
} else if (document.documentElement.lang === 'ja') {
timeago.register('ja', ja);
timeago.render(document.querySelectorAll('.timeago'), 'ja');
} else if (document.documentElement.lang === 'nl') {
timeago.register('nl', nl);
timeago.render(document.querySelectorAll('.timeago'), 'nl');
} else if (document.documentElement.lang === 'pl') {
timeago.register('pl', pl);
timeago.render(document.querySelectorAll('.timeago'), 'pl');
} else if (document.documentElement.lang === 'pt') {
timeago.register('pt', pt);
timeago.render(document.querySelectorAll('.timeago'), 'pt');
} else {
timeago.render(document.querySelectorAll('.timeago'));
}

View file

@ -55,6 +55,17 @@
h5 {
font-size: 1rem;
margin-top: 4rem;
}
}
.lang-switch {
margin-top: 1rem;
select {
background: var(--kbin-footer-bg);
color: var(--kbin-footer-text-color) !important;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,007 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View file

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 1024 1024"
version="1.1"
id="svg13249"
sodipodi:docname="icon-1024x1024xxxx.svg"
xml:space="preserve"
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs13253"><linearGradient
id="a"><stop
offset="0"
style="stop-color:#c358f8;stop-opacity:1"
id="stop13372" /><stop
offset="1"
style="stop-color:#7835ff;stop-opacity:1"
id="stop13374" /></linearGradient><linearGradient
id="b"><stop
offset="0"
style="stop-color:#b550fa;stop-opacity:1"
id="stop13377" /><stop
offset="1"
style="stop-color:#f2a0af;stop-opacity:1"
id="stop13379" /></linearGradient><linearGradient
xlink:href="#a"
id="c"
x1="233.208"
x2="235.371"
y1="155.572"
y2="159.662"
gradientTransform="translate(-19.216,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#b"
id="d"
x1="238.321"
x2="236.355"
y1="154.077"
y2="159.465"
gradientTransform="translate(-20.99,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#a"
id="c-0"
x1="233.20799"
x2="235.371"
y1="155.57201"
y2="159.662"
gradientTransform="translate(-19.216,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#b"
id="d-6"
x1="238.321"
x2="236.355"
y1="154.077"
y2="159.465"
gradientTransform="translate(-20.99,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#a"
id="c-2"
x1="233.20799"
x2="235.371"
y1="155.57201"
y2="159.662"
gradientTransform="translate(-19.216,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#b"
id="d-7"
x1="238.321"
x2="236.355"
y1="154.077"
y2="159.465"
gradientTransform="translate(-20.99,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#a"
id="c-2-0"
x1="233.20799"
x2="235.371"
y1="155.57201"
y2="159.662"
gradientTransform="translate(-19.216,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#b"
id="d-7-4"
x1="238.321"
x2="236.355"
y1="154.077"
y2="159.465"
gradientTransform="translate(-20.99,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#a"
id="c-2-0-9"
x1="233.20799"
x2="235.371"
y1="155.57201"
y2="159.662"
gradientTransform="translate(-19.216,42.773)"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#b"
id="d-7-4-9"
x1="238.321"
x2="236.355"
y1="154.077"
y2="159.465"
gradientTransform="translate(-20.99,42.773)"
gradientUnits="userSpaceOnUse" /></defs><sodipodi:namedview
id="namedview13251"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="0.32593203"
inkscape:cx="869.81325"
inkscape:cy="-85.907482"
inkscape:window-width="4608"
inkscape:window-height="2486"
inkscape:window-x="4597"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg13249" /><rect
width="1024"
height="1024"
fill="#fff"
rx="128"
ry="128"
id="rect13245"
style="fill:#100045;fill-opacity:1"
inkscape:export-filename="rect13245.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" /><g
id="g13404"
transform="matrix(60.470246,0,0,60.470094,256.0927,256.05818)"><path
d="m 214.848,198.342 -0.695,0.006 c -0.293,0 -0.39,0.184 -0.319,0.449 l 0.64,2.845 c 0.142,0.526 0.236,0.62 0.332,0.62 h 0.186 c 0.366,0 0.496,-0.22 0.639,-0.62 l 1.012,-2.845 h -1.333 c -0.095,-0.213 -0.128,-0.454 -0.462,-0.454 z"
style="fill:url(#c);fill-opacity:1;stroke:none;stroke-width:0.0964889"
transform="matrix(1.62214,0,0,1.56333,-346.83413,-307.73623)"
id="path13386" /><path
d="m 217.08,196.846 h 1.631 c 0.131,0 0.403,0.074 0.296,0.387 l -1.356,4.547 c -0.14,0.393 -0.268,0.482 -0.68,0.482 h -2.165 c 0.113,0 0.232,-0.22 0.375,-0.62 l 1.289,-4.36 c 0.094,-0.25 0.22,-0.436 0.61,-0.436 z"
style="fill:url(#d);fill-opacity:1;stroke:none;stroke-width:0.0964889"
transform="matrix(1.62214,0,0,1.56333,-346.83413,-307.73623)"
id="path13388" /></g></svg>

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -1 +1,154 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
{
"id": "/",
"scope": "/",
"start_url": "/",
"name": "/kbin",
"short_name": "/kbin",
"description": "/kbin Progressive Web App",
"display": "standalone",
"orientation": "portrait",
"background_color":"#1E1F22",
"theme_color":"#1E1F22",
"related_applications": [],
"prefer_related_applications": false,
"display_override": [
"window-controls-overlay"
],
"icons":[
{
"purpose":"any",
"src":"assets/icons/icon-48x48.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"48x48",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-48x48.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"48x48",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-72x72.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"72x72",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-72x72.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"72x72",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-96x96.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"96x96",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-96x96.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"96x96",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-144x144.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"144x144",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-144x144.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"144x144",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-192x192.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"192x192",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-192x192.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"192x192",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-256x256.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"256x256",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-256x256.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"256x256",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-384x384.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"384x384",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-384x384.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"384x384",
"type":"image/png"},
{
"purpose":"any",
"src":"assets/icons/icon-512x512.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"512x512",
"type":"image/png"},
{
"purpose":"maskable",
"src":"assets/icons/icon-512x512.png?v=a1b1aa69784e84b93da65e9757bc4658",
"sizes":"512x512",
"type":"image/png"
}
],
"screenshots": [
{
"src": "assets/screenshots/screen.png",
"sizes": "1600x869",
"type": "image/png"
}
],
"features": [
"fediverse",
"ActivityPub",
"simple"
],
"categories": [
"social",
"microblogging"
],
"shortcuts":[
{
"name":"Open Microblog",
"short_name":"Microblog",
"description":"Open the Microblog section",
"url":"/microblog",
"icons":[
{
"src":"assets/icons/kbin-shortcut-microblog.png",
"sizes":"96x96"
}
]
},
{
"name":"Open Magazines",
"short_name":"Magazines",
"description":"Open the Magazines list",
"url":"/magazines",
"icons":[
{
"src":"assets/icons/kbin-shortcut-magazines.png",
"sizes":"96x96"
}
]
},
{
"name":"Open People",
"short_name":"People",
"description":"Open the People list",
"url":"/people",
"icons":[
{
"src":"assets/icons/kbin-shortcut-people.png",
"sizes":"96x96"
}
]
}
]
}

View file

@ -11,6 +11,7 @@ use Symfony\Component\HttpFoundation\Response;
class ThemeSettingsController extends AbstractController
{
public const KBIN_LANG = 'kbin_lang';
public const ENTRIES_VIEW = 'entries_view';
public const ENTRY_COMMENTS_VIEW = 'entry_comments_view';
public const POST_COMMENTS_VIEW = 'post_comments_view';
@ -63,6 +64,7 @@ class ThemeSettingsController extends AbstractController
self::KBIN_POSTS_SHOW_PREVIEW,
self::KBIN_GENERAL_DYNAMIC_LISTS,
self::KBIN_FEDERATION_ENABLED,
self::KBIN_LANG,
];
public const VALUES = [
@ -96,6 +98,10 @@ class ThemeSettingsController extends AbstractController
// $response->headers->setCookie(new Cookie(self::KBIN_GENERAL_ROUNDED_EDGES, 'true', strtotime('+1 year')));
// }
if (self::KBIN_LANG === $key) {
$response->headers->setCookie(new Cookie(self::KBIN_LANG, $value, strtotime('+1 year')));
}
return new \Symfony\Component\HttpFoundation\RedirectResponse(
($request->headers->get('referer') ?? '/').'#settings',
302,

View file

@ -16,6 +16,12 @@ class LanguageListener
{
$request = $event->getRequest();
if ($request->cookies->has('kbin_lang')) {
$request->setLocale($request->cookies->get('kbin_lang'));
return;
}
if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$request->setLocale($this->lang);

View file

@ -77,9 +77,9 @@ class EntryCommentVoter extends Voter
private function canVote(EntryComment $comment, User $user): bool
{
if ($comment->user === $user) {
return false;
}
// if ($comment->user === $user) {
// return false;
// }
if ($comment->entry->magazine->isBanned($user)) {
return false;

View file

@ -82,9 +82,9 @@ class EntryVoter extends Voter
private function canVote(Entry $entry, User $user): bool
{
if ($entry->user === $user) {
return false;
}
// if ($entry->user === $user) {
// return false;
// }
if ($entry->magazine->isBanned($user)) {
return false;

View file

@ -73,9 +73,9 @@ class PostCommentVoter extends Voter
private function canVote(PostComment $comment, User $user): bool
{
if ($comment->user === $user) {
return false;
}
// if ($comment->user === $user) {
// return false;
// }
if ($comment->post->magazine->isBanned($user)) {
return false;

View file

@ -82,9 +82,9 @@ class PostVoter extends Voter
private function canVote(Post $post, User $user): bool
{
if ($post->user === $user) {
return false;
}
// if ($post->user === $user) {
// return false;
// }
if ($post->magazine->isBanned($user)) {
return false;

View file

@ -28,8 +28,7 @@
<button type="submit"
title="{{ 'favourite'|trans }}"
aria-label="{{ 'favourite'|trans }}"
data-action="subject#vote"
{{ html_classes({'disabled': app.user and subject.isAuthor(app.user)}) }}>
data-action="subject#vote">
<span data-subject-target="favCounter">{{ subject.favouriteCount }}</span> <span><i class="fa-solid fa-arrow-up"></i></span>
</button>
<input type="hidden" name="token" value="{{ csrf_token('favourite') }}">
@ -44,7 +43,7 @@
title="{{ 'down_vote'|trans }}"
aria-label="{{ 'down_vote'|trans }}"
data-action="subject#vote"
{{ html_classes('vote__up', {'disabled': app.user and subject.isAuthor(app.user)}) }}>
class="vote__up">
<span data-subject-target="downvoteCounter">{{ subject.countDownvotes }}</span> <span><i class="fa-solid fa-arrow-down"></i></span>
</button>
<input type="hidden" name="token" value="{{ csrf_token('vote') }}">

View file

@ -16,12 +16,12 @@
<menu>
<li><a href="{{ path('magazine_create') }}">{{ 'create_new_magazine'|trans }}</a></li>
<li>
<a href="{{ path('entry_create', {type: 'type.article'|trans|lower}) }}">{{ 'add_new_article'|trans }}</a>
<a href="{{ path('entry_create', {type: 'article'}) }}">{{ 'add_new_article'|trans }}</a>
</li>
<li><a href="{{ path('entry_create', {type: 'type.link'|trans|lower}) }}">{{ 'add_new_link'|trans }}</a>
<li><a href="{{ path('entry_create', {type: 'link'}) }}">{{ 'add_new_link'|trans }}</a>
</li>
<li>
<a href="{{ path('entry_create', {type: 'type.photo'|trans|lower}) }}">{{ 'add_new_photo'|trans }}</a>
<a href="{{ path('entry_create', {type: 'photo'}) }}">{{ 'add_new_photo'|trans }}</a>
</li>
<li><a href="{{ path('posts_front') }}">{{ 'add_new_post'|trans }}</a></li>
<li><a href="#">{{ 'add_new_video'|trans }}</a></li>
@ -62,6 +62,18 @@
aria-label="{{ 'rss'|trans }}"><i class="fa-solid fa-rss"></i></a>
</li>
</menu>
<div class="lang-switch">
<select data-action="kbin#changeLang">
<option value="en" {{ app.request.cookies.get('kbin_lang') is same as 'en' ? 'selected' : '' }}>English</option>
<option value="es" {{ app.request.cookies.get('kbin_lang') is same as 'es' ? 'selected' : '' }}>Español</option>
<option value="fr" {{ app.request.cookies.get('kbin_lang') is same as 'fr' ? 'selected' : '' }}>Français</option>
<option value="it" {{ app.request.cookies.get('kbin_lang') is same as 'it' ? 'selected' : '' }}>Italiano</option>
<option value="ja" {{ app.request.cookies.get('kbin_lang') is same as 'ja' ? 'selected' : '' }}>日本語</option>
<option value="nl" {{ app.request.cookies.get('kbin_lang') is same as 'nl' ? 'selected' : '' }}>Dutch</option>
<option value="pl" {{ app.request.cookies.get('kbin_lang') is same as 'pl' ? 'selected' : '' }}>Polski</option>
<option value="pt" {{ app.request.cookies.get('kbin_lang') is same as 'pt' ? 'selected' : '' }}>Português</option>
</select>
</div>
</div>
</section>
</div>

View file

@ -35,3 +35,83 @@ views: Visualizaciones
created_at: Creado
owner: Propietaria/o
subscribers: Suscriptores/as
down_votes: Voto negativo
no_comments: Sin comentarios
online: Online
comments: Comentarios
posts: Publicaciones
replies: Respuestas
moderators: Moderadores/as
mod_log: Registro de moderación
add_comment: Insertar un comentario
add_post: Añadir una publicación
add_media: Agregar contenido multimedia
markdown_howto: Cómo se utiliza el editor?
enter_your_comment: Introduce tu comentario
enter_your_post: Intruduce tu publicación
activity: Actividad
cover: Portada
related_posts: Entradas relacionadas
random_posts: Publicaciones al azar
federated_magazine_info: El magazin del servidor federado puede estar incompleto.
federated_user_info: El perfil en el servidor federado puede estar incompleto.
go_to_original_instance: Explorar más contenido en la instancia original.
empty: Vacío
subscribe: Subscribirse
unsubscribe: Cancelar subscripción
follow: Seguir
unfollow: Dejar de seguir
reply: Responder
login_or_email: Login o correo electrónico
password: Contraseña
remember_me: Recordar mi sesión
dont_have_account: No tienes una cuenta?
you_cant_login: No puedes acceder?
register: Registrarse
reset_password: Reinicializar la contraseña
show_more: Mostrar más
to: a
in: en
username: Nombre del usuario
email: Email
repeat_password: Repetir la contraseña
terms: Condiciones de uso
privacy_policy: Política de privacidad
about_instance: A propósito
all_magazines: Todos los magazines
stats: Estadísticas
fediverse: Fediverso
awards: Premios
ranking: Ránking
create_new_magazine: Crear un nuevo magazin
add_new_article: Agregar un nuevo artículo
add_new_link: Añadir un nuevo enlace
add_new_photo: Añadir una nueva fotografía
add_new_post: Añadir nueva publicación
add_new_video: Añadir nuevo vídeo
contact: Contacto
faq: Preguntas frecuentes
rss: RSS
change_theme: Cambiar tema
useful: Util
help: Ayuda
check_email: Verifica tu e-mail
reset_check_email_desc: Si existe una cuenta que coincida con su correo electrónico,
se acaba de enviar un correo electrónico que contiene un enlace que puede usar para
restablecer su contraseña. Este enlace expirará en %expire%.
reset_check_email_desc2: Si no has recibido un e-mail, por favor verifica tu carpeta
de spam.
try_again: Intenta de nuevo
email_confirm_header: Hola! Confirma du dirección e-mail.
email_confirm_content: 'Si deseas activar tu cuenta, haz clic en el enlace que se
encuentra a continuación:'
email_verify: Confirma la dirección e-mail
email_confirm_expire: El enlace expira en una hora.
select_magazine: Selecciona un magazin
add_new: Agrega nuevo
url: URL
title: Título
already_have_account: Tienes una cuenta?
agree_terms: Consentimiento para %terms_link_start%Terms and Conditions%terms_link_end%
and %policy_link_start%Privacy Policy%policy_link_end%
email_confirm_title: Confirma tu dirección e-mail.

View file

@ -434,3 +434,34 @@ gold_post_desc: Le message a été partagé 15 fois
sidebar_position: Position de la barre latérale
mod_log_alert: Dans le journal de modération vous pourriez trouver du contenu choquant
enlevé par les modérateurs. Assurez-vous de savoir ce que vous faites.
unpin: Détacher
change_magazine: Changer de magazine
change_language: Changer de langue
change: Changer
pinned: Épinglé
preview: Aperçu
article: Article
reputation: Réputation
note: Note
writing: Écriture
users: Utilisateurs/trices
content: Contenu
week: Semaine
weeks: Semaines
month: Mois
months: Mois
year: Année
federated: Fédéré
local: Local
admin_panel: Panneau admin
dashboard: À la une
contact_email: Email de contact
meta: Méta
instance: Instance
pages: Pages
FAQ: FAQ
type_search_term: Tapez le terme de recherche
federation_enabled: Fédération active
registrations_enabled: Enregistrements ouverts
registration_disabled: Enregistrements fermés
restore: Restaurer

View file

@ -473,3 +473,4 @@ header_logo: Koplogo
browsing_one_thread: Je bekijkt slechts één gesprek binnen deze discussie. Je kunt
alle reacties lezen op de berichtpagina.
return: Terug
boost: Omhoogstemmen

View file

@ -309,3 +309,34 @@ theme: Tema
show_users_avatars: Mostrar os avatars dos utilizadores
restored_thread_by: restaurou tópico por
ranking_disabled: Ranking está desativado
add_new: Adicionar novo
url: URL
title: Título
body: Corpo
tags: Etiquetas
badges: Distintivos
is_adult: +18 / NSFW
eng: ENG
oc: OC
image: Imagem
image_alt: Texto alternativo da imagem
name: Nome
description: Descrição
rules: Regras
domain: Domínio
followers: Seguidores
following: A seguir
subscriptions: Subscrições
overview: Visão geral
cards: Cartões
columns: Colunas
user: Utilizador
joined: Aderiu
moderated: Moderado
ratio: Rácio
people_local: Local
people_federated: Federado
reputation_points: Pontos de reputação
related_tags: Etiquetas relacionadas
go_to_content: Ir para o conteúdo
go_to_filters: Ir para os filtros