mirror of
				https://github.com/cinnyapp/cinny.git
				synced 2025-11-04 06:20:28 +03:00 
			
		
		
		
	Add translation support using i18next (#1576)
Co-authored-by: Ajay Bura <32841439+ajbura@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									b4ce8a7cab
								
							
						
					
					
						commit
						ac1797344c
					
				
					 8 changed files with 184 additions and 10 deletions
				
			
		
							
								
								
									
										134
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										134
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -37,6 +37,9 @@
 | 
				
			||||||
        "formik": "2.4.6",
 | 
					        "formik": "2.4.6",
 | 
				
			||||||
        "html-dom-parser": "4.0.0",
 | 
					        "html-dom-parser": "4.0.0",
 | 
				
			||||||
        "html-react-parser": "4.2.0",
 | 
					        "html-react-parser": "4.2.0",
 | 
				
			||||||
 | 
					        "i18next": "23.12.2",
 | 
				
			||||||
 | 
					        "i18next-browser-languagedetector": "8.0.0",
 | 
				
			||||||
 | 
					        "i18next-http-backend": "2.5.2",
 | 
				
			||||||
        "immer": "9.0.16",
 | 
					        "immer": "9.0.16",
 | 
				
			||||||
        "is-hotkey": "0.2.0",
 | 
					        "is-hotkey": "0.2.0",
 | 
				
			||||||
        "jotai": "2.6.0",
 | 
					        "jotai": "2.6.0",
 | 
				
			||||||
| 
						 | 
					@ -54,6 +57,7 @@
 | 
				
			||||||
        "react-dom": "18.2.0",
 | 
					        "react-dom": "18.2.0",
 | 
				
			||||||
        "react-error-boundary": "4.0.13",
 | 
					        "react-error-boundary": "4.0.13",
 | 
				
			||||||
        "react-google-recaptcha": "2.1.0",
 | 
					        "react-google-recaptcha": "2.1.0",
 | 
				
			||||||
 | 
					        "react-i18next": "15.0.0",
 | 
				
			||||||
        "react-modal": "3.16.1",
 | 
					        "react-modal": "3.16.1",
 | 
				
			||||||
        "react-range": "1.8.14",
 | 
					        "react-range": "1.8.14",
 | 
				
			||||||
        "react-router-dom": "6.20.0",
 | 
					        "react-router-dom": "6.20.0",
 | 
				
			||||||
| 
						 | 
					@ -438,11 +442,12 @@
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@babel/runtime": {
 | 
					    "node_modules/@babel/runtime": {
 | 
				
			||||||
      "version": "7.20.6",
 | 
					      "version": "7.25.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==",
 | 
					      "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "regenerator-runtime": "^0.13.11"
 | 
					        "regenerator-runtime": "^0.14.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": ">=6.9.0"
 | 
					        "node": ">=6.9.0"
 | 
				
			||||||
| 
						 | 
					@ -467,11 +472,6 @@
 | 
				
			||||||
      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
 | 
					      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
 | 
					 | 
				
			||||||
      "version": "0.13.11",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@babel/template": {
 | 
					    "node_modules/@babel/template": {
 | 
				
			||||||
      "version": "7.22.15",
 | 
					      "version": "7.22.15",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6146,6 +6146,15 @@
 | 
				
			||||||
        "entities": "^4.5.0"
 | 
					        "entities": "^4.5.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/html-parse-stringify": {
 | 
				
			||||||
 | 
					      "version": "3.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "void-elements": "3.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/html-react-parser": {
 | 
					    "node_modules/html-react-parser": {
 | 
				
			||||||
      "version": "4.2.0",
 | 
					      "version": "4.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-4.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-4.2.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6191,6 +6200,76 @@
 | 
				
			||||||
        "node": ">= 6"
 | 
					        "node": ">= 6"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/i18next": {
 | 
				
			||||||
 | 
					      "version": "23.12.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==",
 | 
				
			||||||
 | 
					      "funding": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "type": "individual",
 | 
				
			||||||
 | 
					          "url": "https://locize.com"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "type": "individual",
 | 
				
			||||||
 | 
					          "url": "https://locize.com/i18next.html"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "type": "individual",
 | 
				
			||||||
 | 
					          "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@babel/runtime": "^7.23.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/i18next-browser-languagedetector": {
 | 
				
			||||||
 | 
					      "version": "8.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@babel/runtime": "^7.23.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/i18next-http-backend": {
 | 
				
			||||||
 | 
					      "version": "2.5.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "cross-fetch": "4.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/i18next-http-backend/node_modules/cross-fetch": {
 | 
				
			||||||
 | 
					      "version": "4.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "node-fetch": "^2.6.12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/i18next-http-backend/node_modules/node-fetch": {
 | 
				
			||||||
 | 
					      "version": "2.7.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "whatwg-url": "^5.0.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": "4.x || >=6.0.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "peerDependencies": {
 | 
				
			||||||
 | 
					        "encoding": "^0.1.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "peerDependenciesMeta": {
 | 
				
			||||||
 | 
					        "encoding": {
 | 
				
			||||||
 | 
					          "optional": true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/ieee754": {
 | 
					    "node_modules/ieee754": {
 | 
				
			||||||
      "version": "1.2.1",
 | 
					      "version": "1.2.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
 | 
				
			||||||
| 
						 | 
					@ -7717,6 +7796,28 @@
 | 
				
			||||||
        "react": ">=16.4.1"
 | 
					        "react": ">=16.4.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/react-i18next": {
 | 
				
			||||||
 | 
					      "version": "15.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-2O3IgF4zivg57Q6p6i+ChDgJ371IDcEWbuWC6gvoh5NbkDMs0Q+O7RPr4v61+Se32E0V+LmtwePAeqWZW0bi6g==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@babel/runtime": "^7.24.8",
 | 
				
			||||||
 | 
					        "html-parse-stringify": "^3.0.1"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "peerDependencies": {
 | 
				
			||||||
 | 
					        "i18next": ">= 23.2.3",
 | 
				
			||||||
 | 
					        "react": ">= 16.8.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "peerDependenciesMeta": {
 | 
				
			||||||
 | 
					        "react-dom": {
 | 
				
			||||||
 | 
					          "optional": true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "react-native": {
 | 
				
			||||||
 | 
					          "optional": true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/react-is": {
 | 
					    "node_modules/react-is": {
 | 
				
			||||||
      "version": "16.13.1",
 | 
					      "version": "16.13.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
 | 
				
			||||||
| 
						 | 
					@ -7824,6 +7925,12 @@
 | 
				
			||||||
        "node": ">=8.10.0"
 | 
					        "node": ">=8.10.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/regenerator-runtime": {
 | 
				
			||||||
 | 
					      "version": "0.14.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
 | 
				
			||||||
 | 
					      "license": "MIT"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/regexp.prototype.flags": {
 | 
					    "node_modules/regexp.prototype.flags": {
 | 
				
			||||||
      "version": "1.5.2",
 | 
					      "version": "1.5.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
 | 
				
			||||||
| 
						 | 
					@ -9294,6 +9401,15 @@
 | 
				
			||||||
        "@esbuild/win32-x64": "0.19.12"
 | 
					        "@esbuild/win32-x64": "0.19.12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/void-elements": {
 | 
				
			||||||
 | 
					      "version": "3.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">=0.10.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/warning": {
 | 
					    "node_modules/warning": {
 | 
				
			||||||
      "version": "4.0.3",
 | 
					      "version": "4.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,9 @@
 | 
				
			||||||
    "formik": "2.4.6",
 | 
					    "formik": "2.4.6",
 | 
				
			||||||
    "html-dom-parser": "4.0.0",
 | 
					    "html-dom-parser": "4.0.0",
 | 
				
			||||||
    "html-react-parser": "4.2.0",
 | 
					    "html-react-parser": "4.2.0",
 | 
				
			||||||
 | 
					    "i18next": "23.12.2",
 | 
				
			||||||
 | 
					    "i18next-browser-languagedetector": "8.0.0",
 | 
				
			||||||
 | 
					    "i18next-http-backend": "2.5.2",
 | 
				
			||||||
    "immer": "9.0.16",
 | 
					    "immer": "9.0.16",
 | 
				
			||||||
    "is-hotkey": "0.2.0",
 | 
					    "is-hotkey": "0.2.0",
 | 
				
			||||||
    "jotai": "2.6.0",
 | 
					    "jotai": "2.6.0",
 | 
				
			||||||
| 
						 | 
					@ -65,6 +68,7 @@
 | 
				
			||||||
    "react-dom": "18.2.0",
 | 
					    "react-dom": "18.2.0",
 | 
				
			||||||
    "react-error-boundary": "4.0.13",
 | 
					    "react-error-boundary": "4.0.13",
 | 
				
			||||||
    "react-google-recaptcha": "2.1.0",
 | 
					    "react-google-recaptcha": "2.1.0",
 | 
				
			||||||
 | 
					    "react-i18next": "15.0.0",
 | 
				
			||||||
    "react-modal": "3.16.1",
 | 
					    "react-modal": "3.16.1",
 | 
				
			||||||
    "react-range": "1.8.14",
 | 
					    "react-range": "1.8.14",
 | 
				
			||||||
    "react-router-dom": "6.20.0",
 | 
					    "react-router-dom": "6.20.0",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								public/locales/de.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								public/locales/de.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Organisms": {
 | 
				
			||||||
 | 
					    "RoomCommon": {
 | 
				
			||||||
 | 
					      "changed_room_name": " hat den Raum Name geändert"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								public/locales/en.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								public/locales/en.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Organisms": {
 | 
				
			||||||
 | 
					    "RoomCommon": {
 | 
				
			||||||
 | 
					      "changed_room_name": " changed room name"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -46,6 +46,7 @@ import {
 | 
				
			||||||
} from 'folds';
 | 
					} from 'folds';
 | 
				
			||||||
import { isKeyHotkey } from 'is-hotkey';
 | 
					import { isKeyHotkey } from 'is-hotkey';
 | 
				
			||||||
import { Opts as LinkifyOpts } from 'linkifyjs';
 | 
					import { Opts as LinkifyOpts } from 'linkifyjs';
 | 
				
			||||||
 | 
					import { useTranslation } from 'react-i18next';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  decryptFile,
 | 
					  decryptFile,
 | 
				
			||||||
  eventWithShortcode,
 | 
					  eventWithShortcode,
 | 
				
			||||||
| 
						 | 
					@ -958,6 +959,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    [editor]
 | 
					    [editor]
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					  const { t } = useTranslation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const renderMatrixEvent = useMatrixEventRenderer<
 | 
					  const renderMatrixEvent = useMatrixEventRenderer<
 | 
				
			||||||
    [string, MatrixEvent, number, EventTimelineSet, boolean]
 | 
					    [string, MatrixEvent, number, EventTimelineSet, boolean]
 | 
				
			||||||
| 
						 | 
					@ -1273,7 +1275,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli
 | 
				
			||||||
                <Box grow="Yes" direction="Column">
 | 
					                <Box grow="Yes" direction="Column">
 | 
				
			||||||
                  <Text size="T300" priority="300">
 | 
					                  <Text size="T300" priority="300">
 | 
				
			||||||
                    <b>{senderName}</b>
 | 
					                    <b>{senderName}</b>
 | 
				
			||||||
                    {' changed room name'}
 | 
					                    {t('Organisms.RoomCommon.changed_room_name')}
 | 
				
			||||||
                  </Text>
 | 
					                  </Text>
 | 
				
			||||||
                </Box>
 | 
					                </Box>
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								src/app/i18n.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/app/i18n.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					import i18n from 'i18next';
 | 
				
			||||||
 | 
					import LanguageDetector from 'i18next-browser-languagedetector';
 | 
				
			||||||
 | 
					import Backend, { HttpBackendOptions } from 'i18next-http-backend';
 | 
				
			||||||
 | 
					import { initReactI18next } from 'react-i18next';
 | 
				
			||||||
 | 
					import { trimTrailingSlash } from './utils/common';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					i18n
 | 
				
			||||||
 | 
					  // i18next-http-backend
 | 
				
			||||||
 | 
					  // loads translations from your server
 | 
				
			||||||
 | 
					  // https://github.com/i18next/i18next-http-backend
 | 
				
			||||||
 | 
					  .use(Backend)
 | 
				
			||||||
 | 
					  // detect user language
 | 
				
			||||||
 | 
					  // learn more: https://github.com/i18next/i18next-browser-languageDetector
 | 
				
			||||||
 | 
					  .use(LanguageDetector)
 | 
				
			||||||
 | 
					  // pass the i18n instance to react-i18next.
 | 
				
			||||||
 | 
					  .use(initReactI18next)
 | 
				
			||||||
 | 
					  // init i18next
 | 
				
			||||||
 | 
					  // for all options read: https://www.i18next.com/overview/configuration-options
 | 
				
			||||||
 | 
					  .init<HttpBackendOptions>({
 | 
				
			||||||
 | 
					    debug: false,
 | 
				
			||||||
 | 
					    fallbackLng: 'en',
 | 
				
			||||||
 | 
					    interpolation: {
 | 
				
			||||||
 | 
					      escapeValue: false, // not needed for react as it escapes by default
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    load: 'languageOnly',
 | 
				
			||||||
 | 
					    backend: {
 | 
				
			||||||
 | 
					      loadPath: `${trimTrailingSlash(import.meta.env.BASE_URL)}/public/locales/{{lng}}.json`,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default i18n;
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,9 @@ import settings from './client/state/settings';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import App from './app/pages/App';
 | 
					import App from './app/pages/App';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// import i18n (needs to be bundled ;))
 | 
				
			||||||
 | 
					import './app/i18n';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
document.body.classList.add(configClass, varsClass);
 | 
					document.body.classList.add(configClass, varsClass);
 | 
				
			||||||
settings.applyTheme();
 | 
					settings.applyTheme();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,6 +35,10 @@ const copyFiles = {
 | 
				
			||||||
      src: 'public/res/android',
 | 
					      src: 'public/res/android',
 | 
				
			||||||
      dest: 'public/',
 | 
					      dest: 'public/',
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      src: 'public/locales',
 | 
				
			||||||
 | 
					      dest: 'public/',
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue