mirror of
https://framagit.org/framasoft/mobilizon.git
synced 2024-12-21 15:32:32 +00:00
Allow to access to a language directly though instance.tld/:lang
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
7c4a76cc89
commit
5de0cee025
5 changed files with 46 additions and 7 deletions
15
js/src/components/Utils/HomepageRedirectComponent.vue
Normal file
15
js/src/components/Utils/HomepageRedirectComponent.vue
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<template>
|
||||||
|
<div>a</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { Component, Vue } from "vue-property-decorator";
|
||||||
|
import RouteName from "@/router/name";
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class HomepageRedirectComponent extends Vue {
|
||||||
|
created(): void {
|
||||||
|
this.$router.replace({ name: RouteName.HOME });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -13,7 +13,7 @@ import { groupsRoutes } from "./groups";
|
||||||
import { discussionRoutes } from "./discussion";
|
import { discussionRoutes } from "./discussion";
|
||||||
import { userRoutes } from "./user";
|
import { userRoutes } from "./user";
|
||||||
import RouteName from "./name";
|
import RouteName from "./name";
|
||||||
import { i18n } from "@/utils/i18n";
|
import { AVAILABLE_LANGUAGES, i18n } from "@/utils/i18n";
|
||||||
|
|
||||||
Vue.use(Router);
|
Vue.use(Router);
|
||||||
|
|
||||||
|
@ -183,12 +183,23 @@ export const routes = [
|
||||||
announcer: { message: (): string => i18n.t("Page not found") as string },
|
announcer: { message: (): string => i18n.t("Page not found") as string },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: "*",
|
|
||||||
redirect: { name: RouteName.PAGE_NOT_FOUND },
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
for (const locale of AVAILABLE_LANGUAGES) {
|
||||||
|
routes.push({
|
||||||
|
path: `/${locale}`,
|
||||||
|
component: (): Promise<ImportedComponent> =>
|
||||||
|
import(
|
||||||
|
/* webpackChunkName: "HomepageRedirectComponent" */ "../components/Utils/HomepageRedirectComponent.vue"
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
routes.push({
|
||||||
|
path: "*",
|
||||||
|
redirect: { name: RouteName.PAGE_NOT_FOUND },
|
||||||
|
});
|
||||||
|
|
||||||
const router = new Router({
|
const router = new Router({
|
||||||
scrollBehavior,
|
scrollBehavior,
|
||||||
mode: "history",
|
mode: "history",
|
||||||
|
|
|
@ -10,6 +10,8 @@ const DEFAULT_LOCALE = "en_US";
|
||||||
|
|
||||||
const localeInLocalStorage = getLocaleData();
|
const localeInLocalStorage = getLocaleData();
|
||||||
|
|
||||||
|
export const AVAILABLE_LANGUAGES = Object.keys(langs);
|
||||||
|
|
||||||
console.debug("localeInLocalStorage", localeInLocalStorage);
|
console.debug("localeInLocalStorage", localeInLocalStorage);
|
||||||
|
|
||||||
let language =
|
let language =
|
||||||
|
|
|
@ -18,11 +18,13 @@ defmodule Mobilizon.Web.Plugs.SetLocalePlug do
|
||||||
def call(conn, _) do
|
def call(conn, _) do
|
||||||
locale =
|
locale =
|
||||||
[
|
[
|
||||||
|
eventual_path_locale(conn.path_info),
|
||||||
conn.assigns[:user_locale],
|
conn.assigns[:user_locale],
|
||||||
conn.assigns[:detected_locale],
|
conn.assigns[:detected_locale],
|
||||||
default_locale(),
|
default_locale(),
|
||||||
"en"
|
"en"
|
||||||
]
|
]
|
||||||
|
|> Enum.filter(& &1)
|
||||||
|> Enum.map(&determine_best_locale/1)
|
|> Enum.map(&determine_best_locale/1)
|
||||||
|> Enum.filter(&supported_locale?/1)
|
|> Enum.filter(&supported_locale?/1)
|
||||||
|> hd()
|
|> hd()
|
||||||
|
@ -31,6 +33,15 @@ defmodule Mobilizon.Web.Plugs.SetLocalePlug do
|
||||||
assign(conn, :locale, locale)
|
assign(conn, :locale, locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp eventual_path_locale(path_info) do
|
||||||
|
with [locale] <- path_info,
|
||||||
|
true <- supported_locale?(locale) do
|
||||||
|
locale
|
||||||
|
else
|
||||||
|
_ -> nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@spec supported_locale?(String.t()) :: boolean()
|
@spec supported_locale?(String.t()) :: boolean()
|
||||||
defp supported_locale?(locale) do
|
defp supported_locale?(locale) do
|
||||||
GettextBackend
|
GettextBackend
|
||||||
|
|
|
@ -50,8 +50,8 @@ defmodule Mobilizon.Web.Views.Utils do
|
||||||
index_content
|
index_content
|
||||||
|> replace_meta(tags)
|
|> replace_meta(tags)
|
||||||
|> String.replace(
|
|> String.replace(
|
||||||
"<html lang=\"en\" dir=\"auto\">",
|
~s(<html lang="en" dir="auto">),
|
||||||
"<html lang=\"#{locale}\" dir=\"#{get_language_direction(locale)}\">"
|
~s(<html lang="#{locale}" dir="#{get_language_direction(locale)}">)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue