@@ -3,10 +3,32 @@ import Backend from "i18next-chained-backend";
33import resourcesToBackend from "i18next-resources-to-backend" ;
44import { initReactI18next } from "react-i18next" ;
55
6- const getUserLang = ( ) : string => {
6+ function getUserLang ( ) : string {
77 let userLang : string = navigator . language || "en" ;
88 return userLang ?. toLocaleLowerCase ( ) ?. split ( "-" ) [ 0 ] ;
9- } ;
9+ }
10+
11+ function getLocalesResource ( lng : string ) : Promise < any > {
12+ return import ( `./locales/strings_${ lng } .json` ) ;
13+ }
14+
15+ function generateResourceToTranslate ( lng : string ) : Promise < any > {
16+ return getLocalesResource ( lng ) ;
17+ }
18+
19+ export async function downloadResourceToTranslate ( ) {
20+ const lng = i18n . options . fallbackLng ?. toString ( ) || "en" ;
21+ const data = await generateResourceToTranslate ( lng ) ;
22+ const jsonString = JSON . stringify ( data ) ;
23+ // download the save data as a JSON file
24+ const blob = new Blob ( [ jsonString ] , { type : "application/json" } ) ;
25+ // download the file
26+ const url = URL . createObjectURL ( blob ) ;
27+ const a = document . createElement ( "a" ) ;
28+ a . href = url ;
29+ a . download = `strings_${ lng } .json` ;
30+ a . click ( ) ;
31+ }
1032
1133export const useI18n = ( ) => {
1234 if ( ! i18n . isInitialized ) {
@@ -23,7 +45,7 @@ export const useI18n = () => {
2345 backend : {
2446 backends : [
2547 resourcesToBackend ( async ( lng : string , ns : string ) => {
26- let object = await import ( `./locales/strings_ ${ lng } .json` ) ;
48+ let object = await getLocalesResource ( lng ) ;
2749 return object [ ns ] ;
2850 } ) ,
2951 ] ,
0 commit comments