feat(i18n): add qpv locale for Viossa translations
- Add qpv (pidgin viossa) as ISO-friendly locale code - Create qpv.ftl based on vp-VL.ftl for Viossa UI strings - Update LOCALE_IDS and locale loading to include qpv - Add langcode parameter to DrupalService for content filtering - Support 'en' and 'qpv' language codes for Drupal translations
This commit is contained in:
parent
68792b9cf5
commit
22636f025f
3 changed files with 43 additions and 9 deletions
22
apps/vdn-static/src/assets/locale/qpv.ftl
Normal file
22
apps/vdn-static/src/assets/locale/qpv.ftl
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
localeName = "Viossa"
|
||||
vilanticLangs-viossa = "Viossa"
|
||||
vilanticLangs-wodox = "Wodossa"
|
||||
navbar-whatIsViossa = "Ka Viossa?"
|
||||
navbar-resources = "Lerakran"
|
||||
navbar-kotoba = "Kotoba"
|
||||
home-sections-whatIsViossa-title = "Ka Viossa?"
|
||||
home-sections-whatIsViossa-body = "Viossa viskena-mahaossa mahajena na klaani, per mverm hur gvir viskossa mahajena. Viossa nai har rasmi, tont pashun bruk aparchigau tropos. Kakutro au hanutro deki chigaudai, au deki brukena per impla pashun. Viossa lerajena au opetajena na hel na hanu/kaku — dekinai kjannos per lera."
|
||||
home-sections-historyOfViossa-title = "Danvimi fu Viossa"
|
||||
home-sections-historyOfViossa-body = "Viossa hadjidan na Skype na 2014, mahajena na klaani fu r/conlangs na Reddit, grun tuvat per mverm hur viskossa mahajena. Viskossa plussimper fal fu glossa grun klaani uten kamagglossa na sama plas. Na leste viskossa jam na snano 2-3 ranyaossa, men Viossa mahajena grun mange chigau ranyaossa. Grun mangedjin gele gaja apudan per maha viko."
|
||||
home-sections-community-title = "Klaani"
|
||||
home-sections-community-body = "Klaani fu Viossa surudan mange au stranidai, mange rurret kara, na hel gaja, grun na zerjet. Opetaklupau maha uten kjannos os metahanu plussnano au hel uslovanai ke joku tro plusbra kena andr. Viossaklupau mange chigau likk glossa au hanudjin. Na mangedjin, tro awen tel fu sebja. Grun Viossa deki chigaudai au naijam mange tsatain imi znachi ke Viossa blogeta na ishu grunan, likk maha paem os liid."
|
||||
home-images-viossaFlag-alt = "Flakka fu Viossa"
|
||||
resources-title = "Lerakran"
|
||||
resources-resources-discord-title = "Diskordserver"
|
||||
resources-resources-discord-subtitle = "Alting Viossa tsuite slucha na her! Da zetulla jo!"
|
||||
resources-resources-discord-desc = "Mahajena na 2016, server rupnejena na mange, na ima jam plus kena 6000 pashun long. Bitte da se ruuru au de bruk zedvera na una per zetulla!"
|
||||
resources-resources-discord-buttons-join-label = "Zetulla"
|
||||
resources-resources-discord-buttons-rules-label = "Ruuru"
|
||||
resources-images-discordLogo-alt = "Riso fu Diskord"
|
||||
kotoba-title = "Tropos-egal suha"
|
||||
kotoba-searchHelp = "Li vil suha uten tro-egal, tastatsa joku ko os fras na una."
|
||||
|
|
@ -12,11 +12,12 @@ import enUsFtlSrc from "@/assets/locale/en_US.ftl";
|
|||
import esLaFtlSrc from "@/assets/locale/es_LA.ftl";
|
||||
import vpVlFtlSrc from "@/assets/locale/vp_VL.ftl";
|
||||
import wpVlFtlSrc from "@/assets/locale/wp_VL.ftl";
|
||||
import qpvFtlSrc from "@/assets/locale/qpv.ftl";
|
||||
import type { FluentBundle } from "@fluent/bundle";
|
||||
import { compileLocale } from "@/vi18n-lib/compile";
|
||||
import type { ComputedRef } from "vue";
|
||||
|
||||
export const LOCALE_IDS = ["en-US", "es-LA", "vp-VL", "wp-VL"] as const;
|
||||
export const LOCALE_IDS = ["en-US", "es-LA", "vp-VL", "wp-VL", "qpv"] as const;
|
||||
|
||||
export type LocaleId = typeof LocaleId.infer;
|
||||
export const LocaleId = type.enumerated(...LOCALE_IDS);
|
||||
|
|
@ -169,10 +170,11 @@ async function initI18n(): Promise<I18n> {
|
|||
),
|
||||
);
|
||||
|
||||
const [esLa, vpVl, wpVl] = await Promise.all([
|
||||
const [esLa, vpVl, wpVl, qpv] = await Promise.all([
|
||||
doItAllForLocale("es-LA", esLaFtlSrc),
|
||||
doItAllForLocale("vp-VL", vpVlFtlSrc),
|
||||
doItAllForLocale("wp-VL", wpVlFtlSrc),
|
||||
doItAllForLocale("qpv", qpvFtlSrc),
|
||||
]);
|
||||
|
||||
const localeIdToLocale = {
|
||||
|
|
@ -180,6 +182,7 @@ async function initI18n(): Promise<I18n> {
|
|||
"es-LA": esLa,
|
||||
"vp-VL": vpVl,
|
||||
"wp-VL": wpVl,
|
||||
"qpv": qpv,
|
||||
} as const satisfies Record<LocaleId, DeepReadonly<Locale>>;
|
||||
|
||||
const useLocale = (opt: UseLocaleOptions = {}) =>
|
||||
|
|
|
|||
|
|
@ -24,16 +24,19 @@ interface FetchOptions {
|
|||
|
||||
interface NodeListParams extends JsonApiParams {
|
||||
contentType: ContentType;
|
||||
langcode?: "en" | "qpv"; // Support English and Viossa translations
|
||||
}
|
||||
|
||||
interface NodeParams extends JsonApiParams {
|
||||
id: string;
|
||||
contentType: ContentType;
|
||||
include?: string[];
|
||||
langcode?: "en" | "qpv";
|
||||
}
|
||||
|
||||
interface TaxonomyParams {
|
||||
vocabulary: Vocabulary;
|
||||
langcode?: "en" | "qpv";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -68,9 +71,14 @@ export class DrupalService {
|
|||
/**
|
||||
* Build query string from JsonApiParams
|
||||
*/
|
||||
private buildQueryString(params: JsonApiParams = {}): string {
|
||||
private buildQueryString(params: JsonApiParams = {}, langcode?: string): string {
|
||||
const queryParts: string[] = [];
|
||||
|
||||
// Language filter for translated content
|
||||
if (langcode) {
|
||||
queryParts.push(`filter[langcode]=${langcode}`);
|
||||
}
|
||||
|
||||
// Include relationships
|
||||
if (params.include?.length) {
|
||||
queryParts.push(`include=${params.include.join(",")}`);
|
||||
|
|
@ -161,8 +169,8 @@ export class DrupalService {
|
|||
async getNodes<T extends DrupalNodeAttributes = DrupalNodeAttributes>(
|
||||
params: NodeListParams
|
||||
): Promise<JsonApiDocument<T>> {
|
||||
const { contentType, ...queryParams } = params;
|
||||
const queryString = this.buildQueryString(queryParams);
|
||||
const { contentType, langcode, ...queryParams } = params;
|
||||
const queryString = this.buildQueryString(queryParams, langcode);
|
||||
const url = `${this.baseUrl}/node/${contentType}${queryString}`;
|
||||
|
||||
return this.fetchJson<JsonApiDocument<T>>(url);
|
||||
|
|
@ -175,9 +183,9 @@ export class DrupalService {
|
|||
async getNode<T extends DrupalNodeAttributes = DrupalNodeAttributes>(
|
||||
params: NodeParams
|
||||
): Promise<JsonApiDocument<T>> {
|
||||
const { id, contentType, include } = params;
|
||||
const { id, contentType, include, langcode } = params;
|
||||
const queryParams: JsonApiParams = include ? { include } : {};
|
||||
const queryString = this.buildQueryString(queryParams);
|
||||
const queryString = this.buildQueryString(queryParams, langcode);
|
||||
const url = `${this.baseUrl}/node/${contentType}/${id}${queryString}`;
|
||||
|
||||
return this.fetchJson<JsonApiDocument<T>>(url);
|
||||
|
|
@ -189,8 +197,9 @@ export class DrupalService {
|
|||
async getTaxonomyTerms(
|
||||
params: TaxonomyParams
|
||||
): Promise<JsonApiDocument<DrupalTaxonomyTermAttributes>> {
|
||||
const { vocabulary } = params;
|
||||
const url = `${this.baseUrl}/taxonomy_term/${vocabulary}`;
|
||||
const { vocabulary, langcode } = params;
|
||||
const queryString = langcode ? this.buildQueryString({}, langcode) : "";
|
||||
const url = `${this.baseUrl}/taxonomy_term/${vocabulary}${queryString}`;
|
||||
|
||||
return this.fetchJson<JsonApiDocument<DrupalTaxonomyTermAttributes>>(url);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue