diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0c0275..5d581ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,94 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+### [1.7.1](https://github.com/verdaccio/ui/compare/v1.7.0...v1.7.1) (2020-04-27)
+
+
+### Bug Fixes
+
+* **i18n:** fixed current locale ([#462](https://github.com/verdaccio/ui/issues/462)) ([f44abd7](https://github.com/verdaccio/ui/commit/f44abd7dd08a8d68b1bfc2bf0c053f3e80a343d0))
+
+## [1.7.0](https://github.com/verdaccio/ui/compare/v1.6.0...v1.7.0) (2020-04-24)
+
+
+### Features
+
+* add japanese translations ([#460](https://github.com/verdaccio/ui/issues/460)) ([25def6c](https://github.com/verdaccio/ui/commit/25def6ccd5a42d43af1c33e7ace4bd7fdbec0e64))
+
+## [1.6.0](https://github.com/verdaccio/ui/compare/v1.5.0...v1.6.0) (2020-04-23)
+
+
+### Features
+
+* **lng:** Added change language on the fly ([#456](https://github.com/verdaccio/ui/issues/456)) ([675ee98](https://github.com/verdaccio/ui/commit/675ee980ee2c4c789e52d38553f751bb219d1270))
+* Add french language + minor english language fix ([#459](https://github.com/verdaccio/ui/issues/459)) ([b173684](https://github.com/verdaccio/ui/commit/b17368470d63878292aca3e6d2f9adc97748ebac))
+
+## [1.5.0](https://github.com/verdaccio/ui/compare/v1.4.0...v1.5.0) (2020-04-08)
+
+
+### Features
+
+* **flag:** Added Germany flag ([#454](https://github.com/verdaccio/ui/issues/454)) ([07620e5](https://github.com/verdaccio/ui/commit/07620e5d4b1ed54bae2266d936af5306bfbe2d8b))
+
+
+### Bug Fixes
+
+* **styles:** Updated dark colors ([#455](https://github.com/verdaccio/ui/issues/455)) ([d29aa05](https://github.com/verdaccio/ui/commit/d29aa05cc6ef31cb871e79de10c1b1ddd74f023e))
+
+## [1.4.0](https://github.com/verdaccio/ui/compare/v1.3.0...v1.4.0) (2020-04-02)
+
+
+### Features
+
+* added zh-CN translations to the UI ([#448](https://github.com/verdaccio/ui/issues/448)) ([03114a8](https://github.com/verdaccio/ui/commit/03114a842b88ae0f482f389e7ae91af62e00bca4))
+
+## [1.3.0](https://github.com/verdaccio/ui/compare/v1.0.4...v1.3.0) (2020-04-01)
+
+
+### Features
+
+* **style:** added dark mode ([#446](https://github.com/verdaccio/ui/issues/446)) ([cdad5cf](https://github.com/verdaccio/ui/commit/cdad5cf70d69b7bb045fce461a32108def81721d))
+
+
+### Bug Fixes
+
+* **chore:** droped release ([#449](https://github.com/verdaccio/ui/issues/449)) ([f321f7b](https://github.com/verdaccio/ui/commit/f321f7b6fe1ac44897753f0bfdbbaa6ca7eca515))
+
+## [1.2.0](https://github.com/verdaccio/ui/compare/v1.0.4...v1.2.0) (2020-04-01)
+
+
+### Features
+
+* **style:** added dark mode ([#446](https://github.com/verdaccio/ui/issues/446)) ([cdad5cf](https://github.com/verdaccio/ui/commit/cdad5cf70d69b7bb045fce461a32108def81721d))
+
+
+### Bug Fixes
+
+* **chore:** droped release ([#449](https://github.com/verdaccio/ui/issues/449)) ([f321f7b](https://github.com/verdaccio/ui/commit/f321f7b6fe1ac44897753f0bfdbbaa6ca7eca515))
+
+## [1.1.0](https://github.com/verdaccio/ui/compare/v1.0.4...v1.1.0) (2020-04-01)
+
+
+### Features
+
+* **style:** added dark mode ([#446](https://github.com/verdaccio/ui/issues/446)) ([cdad5cf](https://github.com/verdaccio/ui/commit/cdad5cf70d69b7bb045fce461a32108def81721d))
+
+
+### Bug Fixes
+
+* **chore:** droped release ([#449](https://github.com/verdaccio/ui/issues/449)) ([f321f7b](https://github.com/verdaccio/ui/commit/f321f7b6fe1ac44897753f0bfdbbaa6ca7eca515))
+
+### [1.0.4](https://github.com/verdaccio/ui/compare/v1.0.0...v1.0.4) (2020-03-17)
+
+## [1.0.0](https://github.com/verdaccio/ui/compare/v0.3.13...v1.0.0) (2020-03-13)
+
+
+### Features
+
+* **de-translations:** added de-DE translations to the UI ([#441](https://github.com/verdaccio/ui/issues/441)) ([e27d59b](https://github.com/verdaccio/ui/commit/e27d59bff7039473e566090fa0f825f7e462aa4e))
+* spanish translations to UI ([#440](https://github.com/verdaccio/ui/issues/440)) ([0abe1ef](https://github.com/verdaccio/ui/commit/0abe1ef41ca93b900ddda72e2d873ee52078221c))
+* **i18n:** added i18next for user interface translations ([#432](https://github.com/verdaccio/ui/issues/432)) ([7428384](https://github.com/verdaccio/ui/commit/7428384b55e6089dbe45e6b216eee0b670dff576))
+
### [0.3.13](https://github.com/verdaccio/ui/compare/v0.3.12...v0.3.13) (2020-02-02)
@@ -358,4 +446,4 @@ All notable changes to this project will be documented in this file. See [standa
-## 0.0.3 (2019-04-04)
+## 0.0.3 (2019-04-04)
\ No newline at end of file
diff --git a/README.md b/README.md
index 9606542..ce63d2b 100755
--- a/README.md
+++ b/README.md
@@ -93,7 +93,7 @@ If you have any issue you can try the following options, do no desist to ask or
* [Blog](https://medium.com/verdaccio)
* [Donations](https://opencollective.com/verdaccio)
-* [Roadmaps](https://github.com/verdaccio/verdaccio/projects)
+* [Roadmaps](https://github.com/verdaccio/ui/projects)
* [Reporting an issue](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug)
* [Running discussions](https://github.com/verdaccio/verdaccio/issues?q=is%3Aissue+is%3Aopen+label%3Adiscuss)
* [Chat](http://chat.verdaccio.org/)
@@ -101,6 +101,32 @@ If you have any issue you can try the following options, do no desist to ask or
* [FAQ](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)
* [Docker Examples](https://github.com/verdaccio/docker-examples)
+### Translations
+
+Translations are handled locally. I18n files can be found in the folder ```i18n/translations/*``` of this repository. We would love to provide translations from other languages, embracing all our users, but unfortunately we cannot do this without your help. Would you like to help us? Please feel **super welcome** to add a locale by opening a pull request.
+
+Your PR should contain:
+
+1 - A json file in the folder ```i18n/translations/*``` with the translations. The file must be named according to the new added language
+
+2 - The files ```i18n/config.ts``` and ```LanguageSwitch.tsx``` updated with the new language. Please see the current structure
+
+3 - The other translations containing the new language in the language of the file. Example:
+
+New language: ```cs_CZ ```
+
+The file ```pt-BR ``` should contain:
+ ```
+ "lng": {
+ ...,
+ "czech": "Tcheco"
+ }
+ ```
+
+4 - A SVG flag of the new translated language in the the folder ```src/components/Icon/img/*```. You maybe want to compress the svg file using https://jakearchibald.github.io/svgomg/
+
+
+
### License
Verdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
diff --git a/i18n/config.ts b/i18n/config.ts
new file mode 100644
index 0000000..12becef
--- /dev/null
+++ b/i18n/config.ts
@@ -0,0 +1,61 @@
+import i18n from 'i18next';
+import { initReactI18next } from 'react-i18next';
+
+import translationEN from './translations/en-US.json';
+import translationPT from './translations/pt-BR.json';
+import translationES from './translations/es-ES.json';
+import translationDE from './translations/de-DE.json';
+import translationFR from './translations/fr-FR.json';
+import translationCN from './translations/zh-CN.json';
+import translationJP from './translations/ja-JP.json';
+import translationUA from './translations/uk-UA.json';
+
+const languages = {
+ 'en-US': {
+ translation: translationEN,
+ },
+ 'pt-BR': {
+ translation: translationPT,
+ },
+ 'es-ES': {
+ translation: translationES,
+ },
+ 'de-DE': {
+ translation: translationDE,
+ },
+ 'fr-FR': {
+ translation: translationFR,
+ },
+ 'zh-CN': {
+ translation: translationCN,
+ },
+ 'ja-JP': {
+ translation: translationJP,
+ },
+ 'uk-UA': {
+ translation: translationUA,
+ },
+};
+
+type Language = keyof typeof languages;
+
+i18n
+ // pass the i18n instance to react-i18next.
+ .use(initReactI18next)
+ // init i18next
+ // for all options read: https://www.i18next.com/overview/configuration-options
+ .init({
+ // in case window.VEDACCIO_LANGUAGE is undefined,it will fall back to 'en-US'
+ lng: window?.__VERDACCIO_BASENAME_UI_OPTIONS?.language,
+ fallbackLng: 'en-US',
+ whitelist: ['en-US', 'pt-BR', 'es-ES', 'de-DE', 'fr-FR', 'zh-CN', 'ja-JP', 'uk-UA'],
+ load: 'currentOnly',
+ resources: languages,
+ debug: false,
+ interpolation: {
+ escapeValue: false, // react already safes from xss
+ },
+ });
+
+export default i18n;
+export { Language };
diff --git a/i18n/translations/de-DE.json b/i18n/translations/de-DE.json
new file mode 100644
index 0000000..6926701
--- /dev/null
+++ b/i18n/translations/de-DE.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "In die Zwischenablage kopieren",
+ "author-anonymous": "Anonymus",
+ "action-bar-action": {
+ "visit-home-page": "Zur Homepage",
+ "open-an-issue": "Einen Fehler melden",
+ "download-tarball": "Archiv (Tarball) herunterladen"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Registrierungsinformationen"
+ }
+ },
+ "header": {
+ "documentation": "Dokumentation",
+ "registry-info": "Registrierungsinformationen",
+ "greetings": "Hallo "
+ },
+ "search": {
+ "packages": "Pakete suchen"
+ },
+ "auto-complete": {
+ "loading": "wird geladen...",
+ "no-results-found": "Kein Ergebnis gefunden"
+ },
+ "tab": {
+ "uplinks": "Uplinks",
+ "versions": "Versionen",
+ "dependencies": "Abhängigkeiten",
+ "readme": "Liesmich"
+ },
+ "uplinks": {
+ "title": "Uplinks",
+ "no-items": "{{name}} hat keine Uplinks."
+ },
+ "versions": {
+ "current-tags": "Aktuelle Tags",
+ "version-history": "Versionsgeschichte",
+ "not-available": "Nicht verfügbar"
+ },
+ "package": {
+ "published-on": "Veröffentlicht am {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Zur Homepage",
+ "homepage": "Homepage",
+ "open-an-issue": "Einen Fehler melden",
+ "bugs": "Fehler",
+ "download": "{{what}} herunterladen",
+ "the-tar-file": "die tar-Datei",
+ "tarball": "Archiv (Tarball)"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} hat keine Abhängigkeiten",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Benutzername",
+ "password": "Passwort"
+ },
+ "form-placeholder": {
+ "username": "Dein Benutzername",
+ "password": "Dein sicheres Passwort"
+ },
+ "form-validation": {
+ "required-field": "Dieses Feld ist erforderlich",
+ "required-min-length": "Dieses Feld erfordert eine Mindestlänge von {{length}}",
+ "unable-to-sign-in": "Anmeldung nicht möglich",
+ "username-or-password-cant-be-empty": "Benutzername und Passwort dürfen nicht leer sein!"
+ },
+ "help": {
+ "title": "Noch kein Paket publiziert.",
+ "sub-title": "Um dein erstes Paket einfach zu publizieren:",
+ "first-step": "1. Einloggen",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Publizieren",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Diese Seite aktualisieren."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Letzte v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Installierung",
+ "install-using-yarn": "Mit yarn installieren",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Mit npm installieren",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Mit pnpm installieren",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Repository"
+ },
+ "author": {
+ "title": "Autor(in)"
+ },
+ "distribution": {
+ "title": "Neueste Distribution",
+ "license": "Lizenz",
+ "size": "Größe",
+ "file-count": "Anzahl der Dateien"
+ },
+ "maintainers": {
+ "title": "Maintainer"
+ },
+ "contributors": {
+ "title": "Contributor"
+ },
+ "engines": {
+ "npm-version": "NPM Version",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Unterstützt von",
+ "made-with-love-on": "Gemacht mit <0>♥0> in"
+ },
+ "button": {
+ "close": "Schließen",
+ "cancel": "Abbrechen",
+ "login": "Einloggen",
+ "logout": "Ausloggen",
+ "go-to-the-home-page": "Zur Homepage",
+ "learn-more": "Mehr erfahren",
+ "fund-this-package": "Dieses Paket <0>finanzieren0>"
+ },
+ "error": {
+ "unspecific": "Etwas ist schief gelaufen.",
+ "404": {
+ "page-not-found": "404 - Seite nicht gefunden",
+ "sorry-we-could-not-find-it": "Entschuldigung, wir konnten es nicht finden..."
+ },
+ "app-context-not-correct-used": "Der App-Kontext wurde nicht korrekt verwendet",
+ "theme-context-not-correct-used": "Der Theme-Kontext wurde nicht korrekt verwendet",
+ "package-meta-is-required-at-detail-context": "packageMeta wird bei DetailContext benötigt"
+ },
+ "lng": {
+ "english": "Englisch",
+ "japanese": "Japanisch",
+ "portuguese": "Portugiesisch",
+ "spanish": "Spanisch",
+ "german": "Deutsch",
+ "chinese": "Chinesisch",
+ "french": "Französisch",
+ "ukraine": "Ukrainisch"
+ },
+ "help-to-translate": "Hilfe beim Übersetzen",
+ "change-language": "Sprache ändern"
+}
diff --git a/i18n/translations/en-US.json b/i18n/translations/en-US.json
new file mode 100644
index 0000000..b63bebf
--- /dev/null
+++ b/i18n/translations/en-US.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "Copy to clipboard",
+ "author-anonymous": "Anonymous",
+ "action-bar-action": {
+ "visit-home-page": "Visit homepage",
+ "open-an-issue": "Open an issue",
+ "download-tarball": "Download tarball"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Registry Info"
+ }
+ },
+ "header": {
+ "documentation": "Documentation",
+ "registry-info": "Registry Information",
+ "greetings": "Hi "
+ },
+ "search": {
+ "packages": "Search Packages"
+ },
+ "auto-complete": {
+ "loading": "Loading...",
+ "no-results-found": "No results found"
+ },
+ "tab": {
+ "uplinks": "Uplinks",
+ "versions": "Versions",
+ "dependencies": "Dependencies",
+ "readme": "Readme"
+ },
+ "uplinks": {
+ "title": "Uplinks",
+ "no-items": "{{name}} has no uplinks."
+ },
+ "versions": {
+ "current-tags": "Current Tags",
+ "version-history": "Version history",
+ "not-available": "Not available"
+ },
+ "package": {
+ "published-on": "Published on {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Visit homepage",
+ "homepage": "Homepage",
+ "open-an-issue": "Open an issue",
+ "bugs": "Bugs",
+ "download": "Download {{what}}",
+ "the-tar-file": "the tar file",
+ "tarball": "Tarball"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} has no dependencies.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Username",
+ "password": "Password"
+ },
+ "form-placeholder": {
+ "username": "Your username",
+ "password": "Your strong password"
+ },
+ "form-validation": {
+ "required-field": "This field is required",
+ "required-min-length": "This field required the min length of {{length}}",
+ "unable-to-sign-in": "Unable to sign in",
+ "username-or-password-cant-be-empty": "Username or password can't be empty!"
+ },
+ "help": {
+ "title": "No Package Published Yet.",
+ "sub-title": "To publish your first package just:",
+ "first-step": "1. Login",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Publish",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Refresh this page."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Latest v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Installation",
+ "install-using-yarn": "Install using yarn",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Install using npm",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Install using pnpm",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Repository"
+ },
+ "author": {
+ "title": "Author"
+ },
+ "distribution": {
+ "title": "Latest Distribution",
+ "license": "License",
+ "size": "Size",
+ "file-count": "file count"
+ },
+ "maintainers": {
+ "title": "Maintainers"
+ },
+ "contributors": {
+ "title": "Contributors"
+ },
+ "engines": {
+ "npm-version": "NPM Version",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Powered by",
+ "made-with-love-on": "Made with <0>♥0> on"
+ },
+ "button": {
+ "close": "Close",
+ "cancel": "Cancel",
+ "login": "Login",
+ "logout": "Logout",
+ "go-to-the-home-page": "Go to the home page",
+ "learn-more": "Learn More",
+ "fund-this-package": "<0>Fund0> this package"
+ },
+ "error": {
+ "unspecific": "Something went wrong.",
+ "404": {
+ "page-not-found": "404 - Page not found",
+ "sorry-we-could-not-find-it": "Sorry, we couldn't find it..."
+ },
+ "app-context-not-correct-used": "The app context was not used correctly",
+ "theme-context-not-correct-used": "The theme context was not used correctly",
+ "package-meta-is-required-at-detail-context": "packageMeta is required at DetailContext"
+ },
+ "lng": {
+ "english": "English",
+ "japanese": "Japanese",
+ "portuguese": "Portuguese",
+ "spanish": "Spanish",
+ "german": "German",
+ "chinese": "Chinese",
+ "french": "French",
+ "ukraine": "Ukraine"
+ },
+ "help-to-translate": "Help to translate",
+ "change-language": "Change language"
+}
diff --git a/i18n/translations/es-ES.json b/i18n/translations/es-ES.json
new file mode 100644
index 0000000..642462f
--- /dev/null
+++ b/i18n/translations/es-ES.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "Copiar al portapapeles",
+ "author-anonymous": "Anónimo",
+ "action-bar-action": {
+ "visit-home-page": "Visitar página principal",
+ "open-an-issue": "Reportar un error",
+ "download-tarball": "Descargar libreria"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Información del Registro"
+ }
+ },
+ "header": {
+ "documentation": "Documentación",
+ "registry-info": "Información del Registro",
+ "greetings": "Hola "
+ },
+ "search": {
+ "packages": "Buscar paquetes"
+ },
+ "auto-complete": {
+ "loading": "Cargando...",
+ "no-results-found": "Sin resultados encontrados"
+ },
+ "tab": {
+ "uplinks": "Remoto",
+ "versions": "Versiones",
+ "dependencies": "Dependencias",
+ "readme": "Léeme"
+ },
+ "uplinks": {
+ "title": "Remoto",
+ "no-items": "{{name}} not tiene remotos."
+ },
+ "versions": {
+ "current-tags": "Etiquetas actuales",
+ "version-history": "Historial de versiones",
+ "not-available": "No disponible"
+ },
+ "package": {
+ "published-on": "Publicado en {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Ir a la página principal",
+ "homepage": "Página pricinpal",
+ "open-an-issue": "Reportar un problema",
+ "bugs": "Errores",
+ "download": "Descargar {{what}}",
+ "the-tar-file": "el archivo tar",
+ "tarball": "Libreria"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} no tiene dependencias.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Usuario",
+ "password": "Contraseña"
+ },
+ "form-placeholder": {
+ "username": "Tu usuario",
+ "password": "Tu fuerte conntraseña"
+ },
+ "form-validation": {
+ "required-field": "Este campo es requerido",
+ "required-min-length": "Este campo es requerido y la mínima longitud es {{length}}",
+ "unable-to-sign-in": "No se ha podido iniciar sesión",
+ "username-or-password-cant-be-empty": "Nombre de usuario o contraseña no puede estar vacio!"
+ },
+ "help": {
+ "title": "Ningún paquete ha sido publicado aun.",
+ "sub-title": "Para publicar tu primer paquete:",
+ "first-step": "1. Inicia sesión",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Publica",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Refresca la página."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Última v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Instalación",
+ "install-using-yarn": "Instala usando yarn",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Instala usando npm",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Instala usando pnpm",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Repositorio"
+ },
+ "author": {
+ "title": "Autor"
+ },
+ "distribution": {
+ "title": "Última distribución",
+ "license": "Licencia",
+ "size": "Tamaño",
+ "file-count": "archivo cuenta"
+ },
+ "maintainers": {
+ "title": "Mantenedores"
+ },
+ "contributors": {
+ "title": "Colaboradores"
+ },
+ "engines": {
+ "npm-version": "Version NPM",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Hecho con",
+ "made-with-love-on": "Hecho con <0>♥0> on"
+ },
+ "button": {
+ "close": "Cerrar",
+ "cancel": "Cancelar",
+ "login": "Iniciar sesión",
+ "logout": "Cerrar sesión",
+ "go-to-the-home-page": "Ir a la página principal",
+ "learn-more": "Aprender más",
+ "fund-this-package": "<0>Donar0> a este paquete"
+ },
+ "error": {
+ "unspecific": "Algo ha salido mal.",
+ "404": {
+ "page-not-found": "404 - Paquete no encontrado",
+ "sorry-we-could-not-find-it": "Lo siento, no hemos podido encontrarlo..."
+ },
+ "app-context-not-correct-used": "El contexto de la aplicación no fue correctamente usado",
+ "theme-context-not-correct-used": "El contexto del tema no fue correctamente usado",
+ "package-meta-is-required-at-detail-context": "packageMeta es requerido en DetailContext"
+ },
+ "lng": {
+ "english": "Inglés",
+ "japanese": "Japonés",
+ "portuguese": "Portugués",
+ "spanish": "Español",
+ "german": "Alemán",
+ "chinese": "Chino",
+ "french": "Francés",
+ "ukraine": "Ucraniano"
+ },
+ "help-to-translate": "Ayuda a traducir",
+ "change-language": "Cambiar idioma"
+}
diff --git a/i18n/translations/fr-FR.json b/i18n/translations/fr-FR.json
new file mode 100644
index 0000000..ef3f104
--- /dev/null
+++ b/i18n/translations/fr-FR.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "Copier dans le presse-papier",
+ "author-anonymous": "Anonyme",
+ "action-bar-action": {
+ "visit-home-page": "Visiter la page d'accueil",
+ "open-an-issue": "Ouvrir un ticket",
+ "download-tarball": "Télécharger l'archive"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Informations du Registry"
+ }
+ },
+ "header": {
+ "documentation": "Documentation",
+ "registry-info": "Informations du Registry",
+ "greetings": "Bonjour "
+ },
+ "search": {
+ "packages": "Rechercher des paquets"
+ },
+ "auto-complete": {
+ "loading": "En cours de chargement...",
+ "no-results-found": "Aucun resultat trouvé"
+ },
+ "tab": {
+ "uplinks": "Uplinks",
+ "versions": "Versions",
+ "dependencies": "Dépendances",
+ "readme": "Readme"
+ },
+ "uplinks": {
+ "title": "Uplinks",
+ "no-items": "{{name}} n'a pas de uplink."
+ },
+ "versions": {
+ "current-tags": "Tags courants",
+ "version-history": "Historique de version",
+ "not-available": "Non disponible"
+ },
+ "package": {
+ "published-on": "Publié le {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Visiter la page d'accueil",
+ "homepage": "Page d'accueil",
+ "open-an-issue": "Ouvrir un ticket",
+ "bugs": "Bugs",
+ "download": "Télécharger {{what}}",
+ "the-tar-file": "le fichier tar",
+ "tarball": "Archive"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} n'a aucune dépendance.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Nom d'utilisateur",
+ "password": "Mot de passe"
+ },
+ "form-placeholder": {
+ "username": "Votre nom d'utilisateur",
+ "password": "Votre mot de passe"
+ },
+ "form-validation": {
+ "required-field": "Ce champ est obligatoire",
+ "required-min-length": "Ce champ doit faire au moins {{length}} caractères",
+ "unable-to-sign-in": "Connexion impossible",
+ "username-or-password-cant-be-empty": "Le nom d'utilisateur ou mot de passe ne peut pas être vide!"
+ },
+ "help": {
+ "title": "Aucun paquet publié pour l'instant.",
+ "sub-title": "Pour publier votre premier paquet:",
+ "first-step": "1. Se connecter",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Publier",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Recharger cette page."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Dernière v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Installation",
+ "install-using-yarn": "Installer avec yarn",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Installer avec npm",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Installer avec pnpm",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Dépôt"
+ },
+ "author": {
+ "title": "Auteur"
+ },
+ "distribution": {
+ "title": "Dernière distribution",
+ "license": "Licence",
+ "size": "Taille",
+ "file-count": "nombre de fichiers"
+ },
+ "maintainers": {
+ "title": "Mainteneurs"
+ },
+ "contributors": {
+ "title": "Contributeurs"
+ },
+ "engines": {
+ "npm-version": "Version NPM",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Propulsé par",
+ "made-with-love-on": "Fait avec <0>♥0> sur"
+ },
+ "button": {
+ "close": "Fermer",
+ "cancel": "Annuler",
+ "login": "Se connecter",
+ "logout": "Se déconnecter",
+ "go-to-the-home-page": "Aller à la page d'accueil",
+ "learn-more": "En savoir plus",
+ "fund-this-package": "<0>Financer0> ce paquet"
+ },
+ "error": {
+ "unspecific": "Quelque chose a mal tourné.",
+ "404": {
+ "page-not-found": "404 - Page non trouvée",
+ "sorry-we-could-not-find-it": "Desolé, nous n'avons rien retrouvé..."
+ },
+ "app-context-not-correct-used": "Le contexte de l'application n'a pas été utilisé correctement",
+ "theme-context-not-correct-used": "Le contexte du thème n'a pas été utilisé correctement",
+ "package-meta-is-required-at-detail-context": "packageMeta est obligatoire à DetailContext"
+ },
+ "lng": {
+ "english": "Anglais",
+ "japanese": "Japonais",
+ "portuguese": "Portugais",
+ "spanish": "Espagnol",
+ "german": "Allemand",
+ "chinese": "Chinois",
+ "french": "Français",
+ "ukraine": "Ukrainien"
+ },
+ "help-to-translate": "Aide à la traduction",
+ "change-language": "Changer la langue"
+}
diff --git a/i18n/translations/ja-JP.json b/i18n/translations/ja-JP.json
new file mode 100644
index 0000000..eabd114
--- /dev/null
+++ b/i18n/translations/ja-JP.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "クリップボードにコピー",
+ "author-anonymous": "匿名",
+ "action-bar-action": {
+ "visit-home-page": "ホームページへ移動",
+ "open-an-issue": "課題を開く",
+ "download-tarball": "tar形式でダウンロード"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "レジストリの設定方法"
+ }
+ },
+ "header": {
+ "documentation": "ドキュメント",
+ "registry-info": "レジストリ情報",
+ "greetings": "こんにちは、"
+ },
+ "search": {
+ "packages": "パッケージを検索"
+ },
+ "auto-complete": {
+ "loading": "ロード中...",
+ "no-results-found": "パッケージが見つかりませんでした"
+ },
+ "tab": {
+ "uplinks": "アップリンク",
+ "versions": "バージョン情報",
+ "dependencies": "依存パッケージ",
+ "readme": "Readme"
+ },
+ "uplinks": {
+ "title": "アップリンク",
+ "no-items": "{{name}}にアップリンクはありません"
+ },
+ "versions": {
+ "current-tags": "タグ一覧",
+ "version-history": "バージョン履歴",
+ "not-available": "利用できません"
+ },
+ "package": {
+ "published-on": "{{time}}に更新されました •",
+ "version": "v{{version}}",
+ "visit-home-page": "ホームページへ移動",
+ "homepage": "ホームページ",
+ "open-an-issue": "課題を開く",
+ "bugs": "バグ",
+ "download": "{{what}}ダウンロード",
+ "the-tar-file": "tar形式のファイル",
+ "tarball": "tar形式でダウンロード"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}}に依存パッケージはありません",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "ユーザ名",
+ "password": "パスワード"
+ },
+ "form-placeholder": {
+ "username": "あなたのユーザ名",
+ "password": "あなたのパスワード"
+ },
+ "form-validation": {
+ "required-field": "この項目は必ず入力して下さい",
+ "required-min-length": "この項目は{{length}}文字以上入力して下さい",
+ "unable-to-sign-in": "サインインできません",
+ "username-or-password-cant-be-empty": "ユーザ名とパスワードは空にできません"
+ },
+ "help": {
+ "title": "まだパッケージが登録されていません",
+ "sub-title": "以下の手順で最初のパッケージを登録しましょう",
+ "first-step": "1. ログイン",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. 登録",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. このページを再読み込みして下さい"
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "最新バージョンは{{version}}です",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "インストール方法",
+ "install-using-yarn": "yarnでインストール",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "npmでインストール",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "pnpmでインストール",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "リポジトリ"
+ },
+ "author": {
+ "title": "作者"
+ },
+ "distribution": {
+ "title": "最新の配信内容",
+ "license": "ライセンス",
+ "size": "サイズ",
+ "file-count": "ファイル数"
+ },
+ "maintainers": {
+ "title": "パッケージメンテナ"
+ },
+ "contributors": {
+ "title": "コントリビューター"
+ },
+ "engines": {
+ "npm-version": "NPM Version",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Powered by",
+ "made-with-love-on": "Made with <0>♥0> on"
+ },
+ "button": {
+ "close": "閉じる",
+ "cancel": "キャンセル",
+ "login": "ログイン",
+ "logout": "ログアウト",
+ "go-to-the-home-page": "トップページに戻る",
+ "learn-more": "もっと知る",
+ "fund-this-package": "このパッケージに<0>投資0>"
+ },
+ "error": {
+ "unspecific": "何か問題が発生したようです。",
+ "404": {
+ "page-not-found": "404 - Page not found",
+ "sorry-we-could-not-find-it": "残念ながら、ご指定のページはありませんでした…。"
+ },
+ "app-context-not-correct-used": "AppContextが正しく使用されませんでした",
+ "theme-context-not-correct-used": "ThemeContextが正しく使用されませんでした",
+ "package-meta-is-required-at-detail-context": "DetailContextではpackageMetaが必要です"
+ },
+ "lng": {
+ "english": "英語",
+ "japanese": "日本語",
+ "portuguese": "ポルトガル語",
+ "spanish": "スペイン語",
+ "german": "ドイツ語",
+ "chinese": "中国語",
+ "french": "フランス語",
+ "ukraine": "ウクライナ"
+ },
+ "help-to-translate": "翻訳を助ける",
+ "change-language": "言語を変更"
+}
diff --git a/i18n/translations/pt-BR.json b/i18n/translations/pt-BR.json
new file mode 100644
index 0000000..0e01e68
--- /dev/null
+++ b/i18n/translations/pt-BR.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "Copiar para área de transferência",
+ "author-anonymous": "Anônimo(a)",
+ "action-bar-action": {
+ "visit-home-page": "Visitar a página inicial",
+ "open-an-issue": "Criar um incidente",
+ "download-tarball": "Baixar Tarball"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Informações do Registro"
+ }
+ },
+ "header": {
+ "documentation": "Documentação",
+ "registry-info": "Informações do Registro",
+ "greetings": "Oi "
+ },
+ "search": {
+ "packages": "Pesquisar Pacotes"
+ },
+ "auto-complete": {
+ "loading": "Carregando...",
+ "no-results-found": "Nenhum resultado encontrado"
+ },
+ "tab": {
+ "uplinks": "Uplinks",
+ "versions": "Versões",
+ "dependencies": "Dependências",
+ "readme": "Leia-me"
+ },
+ "uplinks": {
+ "title": "Uplinks",
+ "no-items": "{{name}} não tem uplinks."
+ },
+ "versions": {
+ "current-tags": "Tags atuais",
+ "version-history": "Histórico de versões",
+ "not-available": "Não disponível"
+ },
+ "package": {
+ "published-on": "Publicado em {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Visitar a página inicial",
+ "homepage": "Página inicial",
+ "open-an-issue": "Criar um incidente",
+ "bugs": "Erros",
+ "download": "Baixar {{what}}",
+ "the-tar-file": "o arquivo tar",
+ "tarball": "Tarball"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} não tem dependências.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Nome do usuário",
+ "password": "Senha"
+ },
+ "form-placeholder": {
+ "username": "O seu nome",
+ "password": "A sua senha forte"
+ },
+ "form-validation": {
+ "required-field": "Este campo é obrigatório",
+ "required-min-length": "Este campo requer o mínimo de {{length}} caracteres",
+ "unable-to-sign-in": "Não foi possível fazer login",
+ "username-or-password-cant-be-empty": "Nome de usuário ou senha não podem estar vazios!"
+ },
+ "help": {
+ "title": "Nenhum pacote publicado ainda.",
+ "sub-title": "Para publicar seu primeiro pacote apenas:",
+ "first-step": "1. Faça login",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Publique",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Atualize esta página."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Última versão: v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Instalação",
+ "install-using-yarn": "Instale usando yarn",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Instale usando npm",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Instale usando pnpm",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Repositório"
+ },
+ "author": {
+ "title": "Autor(a)"
+ },
+ "distribution": {
+ "title": "Distribuição mais recente",
+ "license": "Licença",
+ "size": "Tamanho",
+ "file-count": "Contagem de arquivos"
+ },
+ "maintainers": {
+ "title": "Mantenedores(as)"
+ },
+ "contributors": {
+ "title": "Contribuidores(as)"
+ },
+ "engines": {
+ "npm-version": "Versão NPM",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Feito por",
+ "made-with-love-on": "Feito com amor <0>♥0> no(a)"
+ },
+ "button": {
+ "close": "Fechar",
+ "cancel": "Cancelar",
+ "login": "Conectar",
+ "logout": "Desconectar",
+ "go-to-the-home-page": "Ir para a página inicial",
+ "learn-more": "Leia mais",
+ "fund-this-package": "<0>Financie0> este pacote"
+ },
+ "error": {
+ "unspecific": "Algo deu errado.",
+ "404": {
+ "page-not-found": "404 - Página não encontrada",
+ "sorry-we-could-not-find-it": "Desculpe, não conseguimos encontrar..."
+ },
+ "app-context-not-correct-used": "O contexto do aplicativo não foi usado corretamente",
+ "theme-context-not-correct-used": "O contexto do tema não foi usado corretamente",
+ "package-meta-is-required-at-detail-context": "packageMeta é requerido em DetailContext"
+ },
+ "lng": {
+ "english": "Inglês",
+ "japanese": "Japonês",
+ "portuguese": "Português",
+ "spanish": "Espanhol",
+ "german": "Alemão",
+ "chinese": "Chinês",
+ "french": "Francês",
+ "ukraine": "Ucraniano"
+ },
+ "help-to-translate": "Ajude a traduzir",
+ "change-language": "Mudar idioma"
+}
diff --git a/i18n/translations/uk-UA.json b/i18n/translations/uk-UA.json
new file mode 100644
index 0000000..ff09060
--- /dev/null
+++ b/i18n/translations/uk-UA.json
@@ -0,0 +1,151 @@
+{
+ "copy-to-clipboard": "Копіювати в буфер обміну",
+ "author-anonymous": "Анонімний",
+ "action-bar-action": {
+ "visit-home-page": "Відвідати домашню сторінку",
+ "open-an-issue": "Відкрити питання, проблему, ...",
+ "download-tarball": "Завантажити архів"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "Інформація про реєстр"
+ }
+ },
+ "header": {
+ "documentation": "Документація",
+ "registry-info": "Інформація про реєстр",
+ "greetings": "Привіт "
+ },
+ "search": {
+ "packages": "Пошук пакетів"
+ },
+ "auto-complete": {
+ "loading": "Завантаження...",
+ "no-results-found": "Нічого не знайдено"
+ },
+ "tab": {
+ "uplinks": "Публікації",
+ "versions": "Версії",
+ "dependencies": "Залежності",
+ "readme": "Опис"
+ },
+ "uplinks": {
+ "title": "Публікації",
+ "no-items": "{{name}} не опубліковано."
+ },
+ "versions": {
+ "current-tags": "Поточні теги",
+ "version-history": "Історія версій",
+ "not-available": "Недоступний"
+ },
+ "package": {
+ "published-on": "Опубліковано {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "Відвідати домашню сторінку",
+ "homepage": "Домашня сторінка",
+ "open-an-issue": "Відкрити питання, проблему, ...",
+ "bugs": "Помилки",
+ "download": "Завантажити {{what}}",
+ "the-tar-file": "файл tar",
+ "tarball": "Завантажити"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} не має залежностей.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "Ім'я користувача",
+ "password": "Пароль"
+ },
+ "form-placeholder": {
+ "username": "Ваше ім'я користувача",
+ "password": "Ваш надійний пароль"
+ },
+ "form-validation": {
+ "required-field": "Це поле є обов'язковим",
+ "required-min-length": "Для цього поля потрібна мінімальна довжина {{length}}",
+ "unable-to-sign-in": "Неможливо ввійти",
+ "username-or-password-cant-be-empty": "Ім'я користувача або пароль не можуть бути порожніми !"
+ },
+ "help": {
+ "title": "Пакети ще не опубліковані",
+ "sub-title": "Опублікувати свій перший пакет просто:",
+ "first-step": "1. Підключіться",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. Опублікуйте",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. Оновіть цю сторінку."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "Остання версія v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "Встановлення",
+ "install-using-yarn": "Встановлення за допомогою yarn",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "Встановлення за допомогою npm",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "Встановлення за допомогою pnpm",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "Сховище"
+ },
+ "author": {
+ "title": "Автор"
+ },
+ "distribution": {
+ "title": "Умови поширення",
+ "license": "Ліцензія",
+ "size": "Розмір",
+ "file-count": "кількість файлів"
+ },
+ "maintainers": {
+ "title": "Технічне супроводження"
+ },
+ "contributors": {
+ "title": "Автори"
+ },
+ "engines": {
+ "npm-version": "NPM версія",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Працює на",
+ "made-with-love-on": "Зроблено з <0> ♥ 0> на"
+ },
+ "button": {
+ "close": "Закрити",
+ "cancel": "Скасувати",
+ "login": "Вхід",
+ "logout": "Вийти",
+ "go-to-the-home-page": "Перейдіть на головну сторінку",
+ "learn-more": "Вивчайте більше",
+ "fund-this-package": "<0>Фінансувати0> цей пакет"
+ },
+ "error": {
+ "unspecific": "Щось пішло не так.",
+ "404": {
+ "page-not-found": "404 - Сторінку не знайдено",
+ "sorry-we-could-not-find-it": "На жаль, ми не змогли його знайти ..."
+ },
+ "app-context-not-correct-used": "Контекст програми не використовувався правильно",
+ "theme-context-not-correct-used": "Контекст теми використано неправильно",
+ "package-meta-is-required-at-detail-context": "packageMeta is required at DetailContext"
+ },
+ "lng": {
+ "english": "Англійська",
+ "japanese": "Японська",
+ "portuguese": "Португальська",
+ "spanish": "Іспанська",
+ "german": "Німецька",
+ "chinese": "Китайська",
+ "french": "Французька",
+ "ukraine": "Українська"
+ },
+ "help-to-translate": "Допоможіть перекласти",
+ "change-language": "Змінити мову"
+}
diff --git a/i18n/translations/zh-CN.json b/i18n/translations/zh-CN.json
new file mode 100644
index 0000000..8915d76
--- /dev/null
+++ b/i18n/translations/zh-CN.json
@@ -0,0 +1,150 @@
+{
+ "copy-to-clipboard": "复制到粘贴板",
+ "author-anonymous": "匿名",
+ "action-bar-action": {
+ "visit-home-page": "访问主页",
+ "open-an-issue": "提交问题",
+ "download-tarball": "下载 tarball"
+ },
+ "dialog": {
+ "registry-info": {
+ "title": "注册信息"
+ }
+ },
+ "header": {
+ "documentation": "文档",
+ "registry-info": "登记信息",
+ "greetings": "您好 "
+ },
+ "search": {
+ "packages": "查找Packages"
+ },
+ "auto-complete": {
+ "loading": "加载中...",
+ "no-results-found": "没有找到结果"
+ },
+ "tab": {
+ "uplinks": "Uplinks",
+ "versions": "版本",
+ "dependencies": "依赖",
+ "readme": "Readme"
+ },
+ "uplinks": {
+ "title": "Uplinks",
+ "no-items": "{{name}} has no uplinks."
+ },
+ "versions": {
+ "current-tags": "当前标签",
+ "version-history": "历史版本",
+ "not-available": "不可用"
+ },
+ "package": {
+ "published-on": "发表于 {{time}} •",
+ "version": "v{{version}}",
+ "visit-home-page": "访问主页",
+ "homepage": "主页",
+ "open-an-issue": "提交问题",
+ "bugs": "Bugs",
+ "download": "下载 {{what}}",
+ "the-tar-file": "tar 文件",
+ "tarball": "Tarball"
+ },
+ "dependencies": {
+ "has-no-dependencies": "{{package}} 没有依赖包.",
+ "dependency-block": "{{package}}@{{version}}"
+ },
+ "form": {
+ "username": "用户名",
+ "password": "密码"
+ },
+ "form-placeholder": {
+ "username": "您的用户名",
+ "password": "您的密码"
+ },
+ "form-validation": {
+ "required-field": "必填项",
+ "required-min-length": "长度不能小于{{length}}",
+ "unable-to-sign-in": "登录失败",
+ "username-or-password-cant-be-empty": "用户名或密码不能为空!"
+ },
+ "help": {
+ "title": "还没有发布任何NPM包.",
+ "sub-title": "发布第一个NPM包:",
+ "first-step": "1. 登录",
+ "first-step-command-line": "npm adduser --registry {{registryUrl}}",
+ "second-step": "2. 发布",
+ "second-step-command-line": "npm publish --registry {{registryUrl}}",
+ "third-step": "3. 刷新当前页面."
+ },
+ "sidebar": {
+ "detail": {
+ "latest-version": "最新版本 v{{version}}",
+ "version": "v{{version}}"
+ },
+ "installation": {
+ "title": "安装",
+ "install-using-yarn": "使用yarn安装",
+ "install-using-yarn-command": "yarn add {{packageName}}",
+ "install-using-npm": "使用npm安装",
+ "install-using-npm-command": "npm install {{packageName}}",
+ "install-using-pnpm": "使用pnpm安装",
+ "install-using-pnpm-command": "pnpm install {{packageName}}"
+ },
+ "repository": {
+ "title": "库"
+ },
+ "author": {
+ "title": "作者"
+ },
+ "distribution": {
+ "title": "最后发布",
+ "license": "License",
+ "size": "大小",
+ "file-count": "文件数量"
+ },
+ "maintainers": {
+ "title": "维护人"
+ },
+ "contributors": {
+ "title": "贡献者"
+ },
+ "engines": {
+ "npm-version": "NPM版本",
+ "node-js": "NODE JS"
+ }
+ },
+ "footer": {
+ "powered-by": "Powered by",
+ "made-with-love-on": "Made with <0>♥0> on"
+ },
+ "button": {
+ "close": "关闭",
+ "cancel": "取消",
+ "login": "登录",
+ "logout": "注销",
+ "go-to-the-home-page": "跳转到主页",
+ "learn-more": "了解更多",
+ "fund-this-package": "<0>Fund0> this package"
+ },
+ "error": {
+ "unspecific": "发生错误.",
+ "404": {
+ "page-not-found": "404 - 页面不存在",
+ "sorry-we-could-not-find-it": "对不起, 我们没找到..."
+ },
+ "app-context-not-correct-used": "The app context was not correct used",
+ "package-meta-is-required-at-detail-context": "packageMeta is required at DetailContext"
+ },
+ "lng": {
+ "english": "英语",
+ "japanese": "日语",
+ "portuguese": "葡萄牙语",
+ "spanish": "西班牙语",
+ "german": "德语",
+ "chinese": "中文",
+ "french": "法语",
+ "ukraine": "烏克蘭"
+ },
+ "help-to-translate": "幫助翻译",
+ "change-language": "改变语言"
+}
diff --git a/package.json b/package.json
index 83aa693..4cf456a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@verdaccio/ui-theme",
- "version": "0.3.13",
+ "version": "1.7.1",
"description": "Verdaccio User Interface",
"author": {
"name": "Verdaccio Core Team",
@@ -15,7 +15,7 @@
"devDependencies": {
"@babel/plugin-proposal-nullish-coalescing-operator": "7.8.0",
"@babel/plugin-proposal-optional-chaining": "7.8.0",
- "@commitlint/cli": "8.3.4",
+ "@commitlint/cli": "8.3.5",
"@commitlint/config-conventional": "8.3.4",
"@emotion/core": "10.0.22",
"@emotion/styled": "10.0.23",
@@ -28,7 +28,7 @@
"@testing-library/react": "9.4.0",
"@types/autosuggest-highlight": "3.1.0",
"@types/enzyme": "3.10.4",
- "@types/jest": "24.0.24",
+ "@types/jest": "25.1.4",
"@types/js-base64": "2.3.1",
"@types/lodash": "4.14.149",
"@types/node": "13.1.6",
@@ -73,8 +73,9 @@
"github-markdown-css": "3.0.1",
"html-webpack-plugin": "3.2.0",
"husky": "3.1.0",
+ "i18next": "19.1.0",
"identity-obj-proxy": "3.0.0",
- "in-publish": "2.0.0",
+ "in-publish": "2.0.1",
"jest": "24.9.0",
"jest-emotion": "10.0.27",
"jest-environment-jsdom": "24.9.0",
@@ -98,9 +99,10 @@
"puppeteer": "2.0.0",
"react": "16.12.0",
"react-autosuggest": "9.4.3",
- "react-dom": "16.12.0",
+ "react-dom": "16.13.0",
"react-hook-form": "3.29.4",
"react-hot-loader": "4.12.18",
+ "react-i18next": "11.3.1",
"react-router-dom": "5.1.2",
"request": "2.88.0",
"resolve-url-loader": "3.1.1",
@@ -140,11 +142,11 @@
"bundlesize": [
{
"path": "./static/vendors.*.js",
- "maxSize": "185 kB"
+ "maxSize": "210 kB"
},
{
"path": "./static/main.*.js",
- "maxSize": "30 kB"
+ "maxSize": "35 kB"
},
{
"path": "./static/[0-9].*.{js,css}",
diff --git a/partials/storage/jquery/package.json b/partials/storage/jquery/package.json
index e01aea4..408c4ca 100644
--- a/partials/storage/jquery/package.json
+++ b/partials/storage/jquery/package.json
@@ -4976,8 +4976,12 @@
"_attachments": {
"jquery-1.5.1.tgz": {
"shasum": "2ae2d661e906c1a01e044a71bb5b2743942183e5"
+ },
+ "jquery-3.3.1.tgz": {
+ "shasum": "958ce29e81c9790f31be7792df5d4d95fc57fbca"
}
},
- "_rev": "60-fed4915c27b9c1e6",
- "readme": "# jQuery\n\n> jQuery is a fast, small, and feature-rich JavaScript library.\n\nFor information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).\nFor source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).\n\nIf upgrading, please see the [blog post for 3.3.1](https://blog.jquery.com/2017/03/20/jquery-3.3.1-now-available/). This includes notable differences from the previous version and a more readable changelog.\n\n## Including jQuery\n\nBelow are some of the most common ways to include jQuery.\n\n### Browser\n\n#### Script tag\n\n```html\n\n```\n\n#### Babel\n\n[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.\n\n```js\nimport $ from \"jquery\";\n```\n\n#### Browserify/Webpack\n\nThere are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...\n\n```js\nvar $ = require(\"jquery\");\n```\n\n#### AMD (Asynchronous Module Definition)\n\nAMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).\n\n```js\ndefine([\"jquery\"], function($) {\n\n});\n```\n\n### Node\n\nTo include jQuery in [Node](nodejs.org), first install with npm.\n\n```sh\nnpm install jquery\n```\n\nFor jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.\n\n```js\nrequire(\"jsdom\").env(\"\", function(err, window) {\n\tif (err) {\n\t\tconsole.error(err);\n\t\treturn;\n\t}\n\n\tvar $ = require(\"jquery\")(window);\n});\n```"
+ "_rev": "61-e6be890a78963127",
+ "readme": "# jQuery\n\n> jQuery is a fast, small, and feature-rich JavaScript library.\n\nFor information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).\nFor source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).\n\nIf upgrading, please see the [blog post for 3.3.1](https://blog.jquery.com/2017/03/20/jquery-3.3.1-now-available/). This includes notable differences from the previous version and a more readable changelog.\n\n## Including jQuery\n\nBelow are some of the most common ways to include jQuery.\n\n### Browser\n\n#### Script tag\n\n```html\n\n```\n\n#### Babel\n\n[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.\n\n```js\nimport $ from \"jquery\";\n```\n\n#### Browserify/Webpack\n\nThere are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...\n\n```js\nvar $ = require(\"jquery\");\n```\n\n#### AMD (Asynchronous Module Definition)\n\nAMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).\n\n```js\ndefine([\"jquery\"], function($) {\n\n});\n```\n\n### Node\n\nTo include jQuery in [Node](nodejs.org), first install with npm.\n\n```sh\nnpm install jquery\n```\n\nFor jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.\n\n```js\nrequire(\"jsdom\").env(\"\", function(err, window) {\n\tif (err) {\n\t\tconsole.error(err);\n\t\treturn;\n\t}\n\n\tvar $ = require(\"jquery\")(window);\n});\n```",
+ "_id": "jquery"
}
diff --git a/scripts/trigger-release.js b/scripts/trigger-release.js
index 1b1c8f9..be290ac 100644
--- a/scripts/trigger-release.js
+++ b/scripts/trigger-release.js
@@ -17,7 +17,7 @@ getStdin()
repo: repoName,
tag_name: tag,
body: changelog,
- draft: true,
+ draft: false,
})
)
.catch(err => {
diff --git a/src/App/App.tsx b/src/App/App.tsx
index c2ba219..911628f 100644
--- a/src/App/App.tsx
+++ b/src/App/App.tsx
@@ -1,21 +1,25 @@
-import React, { useState, useEffect } from 'react';
+/* eslint-disable react/jsx-max-depth */
+import React, { useState, useEffect, Suspense } from 'react';
import styled from '@emotion/styled';
import isNil from 'lodash/isNil';
import { Router } from 'react-router-dom';
+import '../../i18n/config';
import storage from '../utils/storage';
import { isTokenExpire } from '../utils/login';
import Header from '../components/Header';
import Footer from '../components/Footer';
+import Loading from '../components/Loading';
import Box from '../muiComponents/Box';
import StyleBaseline from '../design-tokens/StyleBaseline';
import { Theme } from '../design-tokens/theme';
+import loadDayJSLocale from '../design-tokens/load-dayjs-locale';
import AppContextProvider from './AppContextProvider';
import AppRoute, { history } from './AppRoute';
const StyledBox = styled(Box)<{ theme?: Theme }>(({ theme }) => ({
- backgroundColor: theme && theme.palette.white,
+ backgroundColor: theme?.palette.background.default,
}));
const StyledBoxContent = styled(Box)<{ theme?: Theme }>(({ theme }) => ({
@@ -31,7 +35,6 @@ const StyledBoxContent = styled(Box)<{ theme?: Theme }>(({ theme }) => ({
/* eslint-disable react-hooks/exhaustive-deps */
const App: React.FC = () => {
const [user, setUser] = useState();
-
/**
* Logout user
* Required by: