Skip to content

Commit

Permalink
feat: migrates existing translation files from i18next to next-intl f…
Browse files Browse the repository at this point in the history
…ormat

- `modifyJson.js` contains a script to bulk transform the files
- enables translations for all locales by updating `i18nConfig` and `middleware`
  • Loading branch information
mohitb35 committed Mar 8, 2024
1 parent 32fcac3 commit c3aaa4f
Show file tree
Hide file tree
Showing 103 changed files with 5,294 additions and 5,062 deletions.
2 changes: 1 addition & 1 deletion i18n-config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export const i18nConfig = {
defaultLocale: 'en',
locales: ['en', 'de'],
locales: ['en', 'de', 'cs', 'es', 'fr', 'it', 'pt-BR'],
} as const;

export type Locale = (typeof i18nConfig)['locales'][number];
4 changes: 2 additions & 2 deletions middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getTenantSlug } from './src/utils/multiTenancy/helpers';
import { match as matchLocale } from '@formatjs/intl-localematcher';
import Negotiator from 'negotiator';
import { i18nConfig } from './i18n-config';
import { i18nConfig, Locale } from './i18n-config';
// import createIntlMiddleware from 'next-intl/middleware';

// TODO - update function to consider cookie
Expand All @@ -11,7 +11,7 @@ function getLocale(request: NextRequest): string | undefined {
const negotiatorHeaders: Record<string, string> = {};
request.headers.forEach((value, key) => (negotiatorHeaders[key] = value));

const locales = i18nConfig.locales as unknown as string[];
const locales = i18nConfig.locales as unknown as Locale[];

// Use negotiator and intl-localematcher to get best locale
const languages = new Negotiator({ headers: negotiatorHeaders }).languages(
Expand Down
33 changes: 33 additions & 0 deletions modifyJson.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* Modifies JSON files in a specified directory by converting the file names to PascalCase
* and updating the file contents with the modified JSON data.
* @param {string} directoryPath - The path to the directory containing the JSON files.
*/
const fs = require('fs');
const path = require('path');

const directoryPath = path.join(__dirname, 'public/static/locales/pt-BR');

fs.readdir(directoryPath, (err, files) => {
if (err) {
return console.log('Unable to scan directory: ' + err);
}

files.forEach((file) => {
const filePath = path.join(directoryPath, file);
const rawData = fs.readFileSync(filePath);
const jsonData = JSON.parse(rawData);

const fileNameWithoutExtension = path.basename(file, '.json');
const pascalCaseFileName = fileNameWithoutExtension
.split(/[-_]/)
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join('');

const newData = {
[pascalCaseFileName]: jsonData,
};

fs.writeFileSync(filePath, JSON.stringify(newData, null, 2));
});
});
174 changes: 88 additions & 86 deletions public/static/locales/cs/bulkCodes.json
Original file line number Diff line number Diff line change
@@ -1,88 +1,90 @@
{
"bulkCodesTitle": "Vydání hromadných kódů",
"partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím <partnerEmailLink>[email protected]</partnerEmailLink> pro podrobnosti.",
"bulkCodesDescription1": "Pomocí PlanetCash můžete generovat tisíce kódů v jedné operaci.",
"bulkCodesDescription2": "Tuto funkci můžete použít k vytvoření kódů pro vlastní certifikáty, dárkové karty, dary jménem uživatelů a uplatnitelné kódy, které můžete přiřadit k vašim produktům.",
"tabCreationMethod": "Metoda tvorby",
"tabSelectProject": "Zvolte projekt",
"tabIssueCodes": "Kódy vydání",
"issueCodes": "Kódy vydání",
"issuingCodes": "Vydávání kódů...",
"importMethodText": {
"title": "Importovat soubor",
"subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:",
"details": [
"Chci uvést jméno příjemce nebo e-mail pro každý kód.",
"Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).",
"Chci vydat kódy pro různé počty stromů."
]
},
"genericMethodText": {
"title": "Vytvoření obecných kódů",
"subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:",
"details": [
"Všechny kódy budou mít stejnou hodnotu.",
"Chci vygenerovat řadu kódů pro libovolné příjemce.",
"Jména a e-maily nelze s kódem asociovat."
]
},
"projectName": "Název projektu",
"costPerUnit": "Cena za jednotku",
"labelComment": "Komentář [Soukromé]",
"unitOfMeasurement": "Měrná jednotka",
"units": {
"ha": "ha",
"tree": " strom",
"m2": ""
},
"unitsPerCode": "Jednotky za kód*",
"totalNumberOfCodes": "Celkový počet kódů*",
"occasion": "Příležitost",
"total": "Celkem",
"chargeConsentText": "Kliknutím na Kódy vydání, souhlasíte s tím, že výše uvedená částka bude naúčtována na váš účet.",
"invalidEmailWarningText": "Ujistěte se, že příjemce_email je platný e-mail. Používání fiktivních nebo neplatných e-mailů povede k pozastavení účtu v souladu s podmínkami Platformy.",
"projectRequired": "Není vybrán žádný projekt.",
"unitsPerCodeRequired": "Každý kód by měl obsahovat alespoň 1 jednotku.",
"codeQuantityRequired": "Musíte vytvořit alespoň 1 kód.",
"unitsPerCodeInvalidRange": "Jeden kód může obsahovat maximálně 1000 jednotek.",
"codeQuantityInvalidRange": "Maximálně lze vytvořit 5000 kódů.",
"featureAvailability": "Tato funkce je k dispozici pouze pro partnerské projekty.",
"planetCashDisabled": "PlanetCash není aktivován. Chcete-li tuto funkci používat, aktivujte PlanetCash.",
"insufficientPCashBalance": "Nedostatečný balanc.",
"addBalanceGeneric": "Kliknutím sem přidáte finanční prostředky.",
"instructionsUploadCSV": {
"empty": "Přetáhněte /kliknutím vyberte soubor.xslx/.csv pro nahrání.",
"error": "Zkontrolujte prosím problémy a přetáhněte sem soubor .xslx / .csv, který chcete nahrát.",
"processing": "Počkejte prosím, než analyzujeme váš soubor...",
"success": "Pokračujte nebo přetáhněte soubor .xlsx nebo .csv sem, abyste nahradili aktuální soubor."
},
"statusUploadCSV": {
"error": "Chyba",
"success": "Analýza souborů dokončena"
},
"errorUploadCSV": {
"fileInvalidType": "Povoleny jsou pouze soubory.csv a .xslx.",
"tooManyFiles": "Nahrajte prosím pouze jeden soubor.",
"fileTooSmall": "Nahraný soubor se zdá být prázdný.",
"fileTooLarge": "Nahraný soubor musí být 5 MB nebo méně.",
"missingColumns": "Nahraný soubor neobsahuje následující sloupce: ",
"noRecipientData": "Nebyla nalezena žádná data příjemce.",
"tooManyRecipients": "V jedné transakci lze zpracovat maximálně 1000 příjemců.",
"unitsNotProvided": "Jednotky chybí/neplatné pro některé příjemce.",
"notifyNotPossible": "U některých příjemců, kteří mají být upozorněni, chybí e-mail a jméno.",
"instructionRowError": "Došlo k chybě v prvním řádku. Zkontrolujte, zda jste pokyny smazali, nebo zda existují další údaje.",
"invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {{rowList}}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.",
"generalError": "Něco se pokazilo. Zkuste to prosím o chvíli."
},
"successUploadCSV": {
"ignoredColumns": "Další sloupce byly ignorovány"
},
"importInstructions": "Přečtěte si <docsLink>dokumentaci zde</docsLink>, stáhněte si <excelLink>šablonu aplikace Excel zde</excelLink>, a <csvLink>šablonu CSV zde</csvLink>.",
"donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...",
"donationError": {
"planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.",
"default": "Něco se pokazilo. Zkuste to prosím po chvíli.",
"planet_cash_payment_failure": "Transakce selhala. {{reason}}",
"planet_cash_invalid_project": "Nelze darovat vybranému projektu."
"BulkCodes": {
"bulkCodesTitle": "Vydání hromadných kódů",
"partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím <partnerEmailLink>[email protected]</partnerEmailLink> pro podrobnosti.",
"bulkCodesDescription1": "Pomocí PlanetCash můžete generovat tisíce kódů v jedné operaci.",
"bulkCodesDescription2": "Tuto funkci můžete použít k vytvoření kódů pro vlastní certifikáty, dárkové karty, dary jménem uživatelů a uplatnitelné kódy, které můžete přiřadit k vašim produktům.",
"tabCreationMethod": "Metoda tvorby",
"tabSelectProject": "Zvolte projekt",
"tabIssueCodes": "Kódy vydání",
"issueCodes": "Kódy vydání",
"issuingCodes": "Vydávání kódů...",
"importMethodText": {
"title": "Importovat soubor",
"subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:",
"details": [
"Chci uvést jméno příjemce nebo e-mail pro každý kód.",
"Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).",
"Chci vydat kódy pro různé počty stromů."
]
},
"genericMethodText": {
"title": "Vytvoření obecných kódů",
"subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:",
"details": [
"Všechny kódy budou mít stejnou hodnotu.",
"Chci vygenerovat řadu kódů pro libovolné příjemce.",
"Jména a e-maily nelze s kódem asociovat."
]
},
"projectName": "Název projektu",
"costPerUnit": "Cena za jednotku",
"labelComment": "Komentář [Soukromé]",
"unitOfMeasurement": "Měrná jednotka",
"units": {
"ha": "ha",
"tree": " strom",
"m2": ""
},
"unitsPerCode": "Jednotky za kód*",
"totalNumberOfCodes": "Celkový počet kódů*",
"occasion": "Příležitost",
"total": "Celkem",
"chargeConsentText": "Kliknutím na Kódy vydání, souhlasíte s tím, že výše uvedená částka bude naúčtována na váš účet.",
"invalidEmailWarningText": "Ujistěte se, že příjemce_email je platný e-mail. Používání fiktivních nebo neplatných e-mailů povede k pozastavení účtu v souladu s podmínkami Platformy.",
"projectRequired": "Není vybrán žádný projekt.",
"unitsPerCodeRequired": "Každý kód by měl obsahovat alespoň 1 jednotku.",
"codeQuantityRequired": "Musíte vytvořit alespoň 1 kód.",
"unitsPerCodeInvalidRange": "Jeden kód může obsahovat maximálně 1000 jednotek.",
"codeQuantityInvalidRange": "Maximálně lze vytvořit 5000 kódů.",
"featureAvailability": "Tato funkce je k dispozici pouze pro partnerské projekty.",
"planetCashDisabled": "PlanetCash není aktivován. Chcete-li tuto funkci používat, aktivujte PlanetCash.",
"insufficientPCashBalance": "Nedostatečný balanc.",
"addBalanceGeneric": "Kliknutím sem přidáte finanční prostředky.",
"instructionsUploadCSV": {
"empty": "Přetáhněte /kliknutím vyberte soubor.xslx/.csv pro nahrání.",
"error": "Zkontrolujte prosím problémy a přetáhněte sem soubor .xslx / .csv, který chcete nahrát.",
"processing": "Počkejte prosím, než analyzujeme váš soubor...",
"success": "Pokračujte nebo přetáhněte soubor .xlsx nebo .csv sem, abyste nahradili aktuální soubor."
},
"statusUploadCSV": {
"error": "Chyba",
"success": "Analýza souborů dokončena"
},
"errorUploadCSV": {
"fileInvalidType": "Povoleny jsou pouze soubory.csv a .xslx.",
"tooManyFiles": "Nahrajte prosím pouze jeden soubor.",
"fileTooSmall": "Nahraný soubor se zdá být prázdný.",
"fileTooLarge": "Nahraný soubor musí být 5 MB nebo méně.",
"missingColumns": "Nahraný soubor neobsahuje následující sloupce: ",
"noRecipientData": "Nebyla nalezena žádná data příjemce.",
"tooManyRecipients": "V jedné transakci lze zpracovat maximálně 1000 příjemců.",
"unitsNotProvided": "Jednotky chybí/neplatné pro některé příjemce.",
"notifyNotPossible": "U některých příjemců, kteří mají být upozorněni, chybí e-mail a jméno.",
"instructionRowError": "Došlo k chybě v prvním řádku. Zkontrolujte, zda jste pokyny smazali, nebo zda existují další údaje.",
"invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {{rowList}}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.",
"generalError": "Něco se pokazilo. Zkuste to prosím o chvíli."
},
"successUploadCSV": {
"ignoredColumns": "Další sloupce byly ignorovány"
},
"importInstructions": "Přečtěte si <docsLink>dokumentaci zde</docsLink>, stáhněte si <excelLink>šablonu aplikace Excel zde</excelLink>, a <csvLink>šablonu CSV zde</csvLink>.",
"donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...",
"donationError": {
"planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.",
"default": "Něco se pokazilo. Zkuste to prosím po chvíli.",
"planet_cash_payment_failure": "Transakce selhala. {{reason}}",
"planet_cash_invalid_project": "Nelze darovat vybranému projektu."
}
}
}
}
Loading

0 comments on commit c3aaa4f

Please sign in to comment.