{"id":15070029,"url":"https://github.com/kareemkibue/k2-react-translate","last_synced_at":"2025-04-10T17:11:00.804Z","repository":{"id":39313412,"uuid":"211879742","full_name":"kareemkibue/k2-react-translate","owner":"kareemkibue","description":"A simple, easy-to-use translation library based on Context API, with optional localized react-router routing.","archived":false,"fork":false,"pushed_at":"2023-03-26T18:28:58.000Z","size":2602,"stargazers_count":3,"open_issues_count":24,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T14:51:20.505Z","etag":null,"topics":["localization","react","react-js","react-router","react-translate","translation"],"latest_commit_sha":null,"homepage":"https://codesandbox.io/s/confident-microservice-l0een","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kareemkibue.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-30T14:30:21.000Z","updated_at":"2023-01-31T17:36:22.000Z","dependencies_parsed_at":"2022-08-09T14:46:59.365Z","dependency_job_id":null,"html_url":"https://github.com/kareemkibue/k2-react-translate","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kareemkibue%2Fk2-react-translate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kareemkibue%2Fk2-react-translate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kareemkibue%2Fk2-react-translate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kareemkibue%2Fk2-react-translate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kareemkibue","download_url":"https://codeload.github.com/kareemkibue/k2-react-translate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248261354,"owners_count":21074221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["localization","react","react-js","react-router","react-translate","translation"],"created_at":"2024-09-25T01:46:35.379Z","updated_at":"2025-04-10T17:11:00.777Z","avatar_url":"https://github.com/kareemkibue.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# k2-react-translate\n\n[![npm](https://img.shields.io/npm/v/k2-react-translate?flat)](https://www.npmjs.com/package/k2-react-translate)\n\u003cbr/\u003e\n[![npm](https://img.shields.io/npm/dm/k2-react-translate?flat)](https://www.npmjs.com/package/k2-react-translate)\n[![npm](https://img.shields.io/npm/dw/k2-react-translate?flat)](https://www.npmjs.com/package/k2-react-translate)\n\u003cbr/\u003e\n[![GitHub issues](https://img.shields.io/github/issues/kareemkibue/k2-react-translate?flat)](https://github.com/kareemkibue/k2-react-translate/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/kareemkibue/k2-react-translate?flat)](https://github.com/kareemkibue/k2-react-translate/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)\n\u003cbr/\u003e\n[![GitHub](https://img.shields.io/github/license/kareemkibue/k2-react-translate?flat)](https://github.com/kareemkibue/k2-react-translate/blob/master/LICENSE)\n\u003cbr/\u003e\n![GitHub stars](https://img.shields.io/github/stars/kareemkibue/k2-react-translate?style=social)\n![GitHub stars](https://img.shields.io/github/forks/kareemkibue/k2-react-translate?style=social)\n![GitHub stars](https://img.shields.io/github/watchers/kareemkibue/k2-react-translate?style=social)\n\nA simple, easy-to-use translation library based on React's Context API, with optional localized\n`react-router` routing.\n\nSee demo on [CodeSandbox](https://codesandbox.io/s/confident-microservice-l0een).\n\n[![image](https://user-images.githubusercontent.com/6430272/69345005-61690680-0c3e-11ea-9d1b-d82a16567e8e.png)](https://codesandbox.io/s/confident-microservice-l0een)\n\n## Table of Contents\n\n-   [Problem Statement](#problem-statement)\n-   [Setup](#setup)\n-   [Documentation (Translation)](#documentation-translation)\n-   [Documentation (Localized Routing)](#documentation-localized-routing)\n-   [Development](#development)\n-   [Known Issues](#known-issues)\n-   [Changelog](#changelog)\n\n## Problem Statement\n\nTBD\n\n## Setup\n\nThis ES5 module is distributed via [npm](https://www.npmjs.com/package/k2-react-translate) and\nshould be installed as a production dependency.\n\nNote: TypeScript syntax is used throughout the docs, but the library should run without issue on a\n`babel/react` setup.\n\nUsing _yarn_ (preferred)\n\n```\nyarn add -E k2-react-translate\n```\n\nor via _npm_\n\n```\nnpm i -S -E k2-react-translate\n```\n\n### `peerDependencies`\n\n-   [`react@^16.8.0`](https://github.com/facebook/react)\n    -   `react@^16.8.0` would have to be installed to use the `useTranslate` hook.\n-   [`react-dom@^16.8.0`](https://github.com/facebook/react/tree/master/packages/react-dom)\n-   [`react-router-dom`](https://github.com/ReactTraining/react-router/tree/master/packages/react-router-dom)\n-   [`history`](https://github.com/ReactTraining/history)\n\n\u003c!-- ### `optionalDependencies` --\u003e\n\nTypescirpt type definitions come bundled in.\n\n### Project Setup\n\nIf using TypeScript in VS Code, add the following configuration to your `tsconfig.json` to allow for\nimporting json files into your modules:\n\n```jsonc\n// tsconfig.json\n{\n\t\"compilerOptions\": {\n\t\t// other config options ...\n\t\t\"resolveJsonModule\": true\n\t}\n}\n```\n\nSetup your translations:\n\nIf using VS Code, the richie5um2's\n[Sort JSON objects](https://marketplace.visualstudio.com/items?itemName=richie5um2.vscode-sort-json)\nmarketplace extension may help to keep your translations file organized.\n\n```jsonc\n// translations.json\n{\n\t\"HELLO\": {\n\t\t\"en\": \"Hello\",\n\t\t\"fr\": \"Bonjour\"\n\t},\n\t\"HELLO_NAME\": {\n\t\t\"en\": \"Hello, {firstName}\",\n\t\t\"fr\": \"Bonjour, {firstName}\"\n\t},\n\t\"AVAILABLE_IN_COUNTRY\": {\n\t\t\"en\": \"Available in {countryName}\",\n\t\t\"fr\": \"Disponsible en {countryName}\"\n\t},\n\t\"PRIVACY_POLICY\": {\n\t\t\"en\": \"\u003ca href='{link}'\u003ePrivacy Policy\u003c/a\u003e\",\n\t\t\"fr\": \"\u003ca href='{link}'\u003ePolitique de Confidentialité\u003c/a\u003e\"\n\t}\n}\n```\n\nEntry point:\n\n```tsx\n// index.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport * as ReactDOM from 'react-dom'; // standard TypeScript syntax\nimport { LocaleProvider } from 'k2-react-translate';\nimport { App } from './App';\nimport translations from './translations.json';\n\nReactDOM.render(\n\t\u003cLocaleProvider translations={translations} languages={['en', 'fr']} localizeUrls={false}\u003e\n\t\t\u003cApp /\u003e\n\t\u003c/LocaleProvider\u003e,\n\tdocument.getElementById('app')\n);\n```\n\n## Documentation (Translation)\n\n`k2-react-translate` barrels (re-exports) the following sub-modules as named exports:\n\n### `\u003cLocaleProvider/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LocaleProvider.tsx)\n\nA Context API wrapper to `\u003cLocaleContext.Provider/\u003e`. This wrapper is required to apply\n`k2-react-translate` translations.\n\n| Props             | Type                                | Description                                                                                                                                                                                        |\n| ----------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `translations`    | Object (required)                   | See [translations under Project Setup](#Project-Setup)                                                                                                                                             |\n| `languages`       | Array\u003cstring\u003e (required)            | An array of language codes. Used as [`params`](https://scotch.io/courses/using-react-router-4/route-params) to `react-router` if you choose to incorporate localized routing into your app.        |\n| `defaultLanguage` | string (optional)                   | Default language, Must be included in the `languages` array above                                                                                                                                  |\n| `localizedUrls`   | boolean (optional), default={false} | Option to localize URLs with every route change, page reload or language change. Additionally, add a `\u003cRouter/\u003e` wrapper from `react-router`, meaning this need not be done in your `RouterConfig` |\n\n#### Usage\n\nSee [Project Setup](Project-Setup) above.\n\n---\n\n### `useTranslate` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/useTranslate.ts)\n\nA custom hook for use in Function Components.\n\n**Dependencies:** `react@^16.8.0`, `react-dom@^16.8.0`\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { useTranslate } from 'k2-react-translate';\n\nconst links = {\n\ten: '/en/privacy-policy',\n\tfr: '/fr/privacy-policy',\n};\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e = () =\u003e {\n\tconst { translate, translateAndParse, language, changeLanguage } = useTranslate\u003cstring\u003e();\n\n\tconst handleClick = (): void =\u003e {\n\t\t// change language to French\n\t\tchangeLanguage('fr');\n\t};\n\n\treturn (\n\t\t\u003cdiv\u003e\n\t\t\t{translate('HELLO')}\n\t\t\t// \"Hello\" (en) - string // \"Bonjour\" (fr) - string\n\t\t\t{translate('HELLO_NAME', { firstName: 'Jaqen' })}\n\t\t\t// \"Hello, Jaqen\" (en) - string // \"Bonjour, Jaqen\" (fr) - string\n\t\t\t{translateAndParse('PRIVACY_POLICY', { link: links[language] })}\n\t\t\t// \u003ca href=\"/en/privacy-policy\"\u003ePrivacy Policy\u003c/a\u003e (en) - ReactElement // \u003ca href=\"/fr/privacy-policy\"\u003e\n\t\t\t\tPolitique de Confidentialité\n\t\t\t\u003c/a\u003e (fr) - ReactElement\n\t\t\t\u003cbutton onClick={handleClick}\u003eChange Language\u003c/button\u003e\n\t\t\u003c/div\u003e\n\t);\n};\n```\n\n---\n\n### `\u003cTranslator/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/Translator.tsx)\n\nA React component that wraps `\u003cLocaleContext.Consumer/\u003e` that performs translations, given\ntranslation keys as prop arguments.\n\nIf using `react v16.8.0+`, I'd strongly recommend using the `useTranslate` hook\n[above](#usetranslate---source) instead. `useTranslate` works in the same way but provides for\ncleaner and less verbose use.\n\n| Props       | Type                                | Description                                                                  |\n| ----------- | ----------------------------------- | ---------------------------------------------------------------------------- |\n| `id`        | string (optional)                   | translation key                                                              |\n| `vars`      | object (optional)                   | dynamic translation variables, set outside the `translations.json`           |\n| `render`    | function (optional)                 | render prop, returning `(language:string)=\u003eReactNode`                        |\n| `parseHtml` | boolean (optional), `default=false` | option to sanitize and parse stringified HTML set in the `translations.json` |\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { Translator } from 'k2-react-translate';\n\nconst links = {\n\ten: '/en/privacy-policy',\n\tfr: '/fr/privacy-policy',\n};\n\nconst MyComponent: React.StatelessComponent\u003c{}\u003e = () =\u003e {\n\treturn (\n\t\t\u003cdiv\u003e\n\t\t\t\u003cTranslator id=\"HELLO\" /\u003e\n\t\t\t// \"Hello\" (en) - string // \"Bonjour\" (fr) - string\n\t\t\t\u003cTranslator id=\"HELLO_NAME\" vars={{ firstName: 'Jaqen' }} /\u003e\n\t\t\t// \"Hello, Jaqen\" (en) - string // \"Bonjour, Jaqen\" (fr) - string\n\t\t\t\u003cTranslator id=\"PRIVACY_POLICY\" vars={{ link: links[language] }} /\u003e\n\t\t\t// \u003ca href=\"/en/privacy-policy\"\u003ePrivacy Policy\u003c/a\u003e (en) - ReactElement // \u003ca href=\"/fr/privacy-policy\"\u003e\n\t\t\t\tPolitique de Confidentialité\n\t\t\t\u003c/a\u003e (fr) - ReactElement\n\t\t\u003c/div\u003e\n\t);\n};\n```\n\n---\n\n### `\u003cLanguageSwitcher /\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LanguageSwitcher.tsx)\n\nA button wrapped React component that provides the ability to set languages.\n\nSwitching languages can alternatively be performed under an exposed function in the `useTranslate`\nhook documented [here](#usetranslate---source).\n\n| Props     | Type     | Description      |\n| --------- | -------- | ---------------- |\n| `onClick` | Function | Synthentic event |\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LanguageSwitcher } from 'k2-react-translate';\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e=()=\u003e{\n\n    const handleClick:(changeLanguage: (language:string)=\u003e void ): void=\u003e{\n        // change language to French\n        changeLanguage('fr');\n    }\n\n    return \u003cdiv\u003e\n        \u003cLanguageSwitcher onClick={handleClick} /\u003e\n    \u003c/div\u003e;\n}\n```\n\n## Documentation (Localized Routing)\n\nLocalized routing is optional. If used, `react-router-dom` would need to be installed as a\nproduction dependency.\n\n### `\u003cLocalizedRoutes/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LocalizedRoutes.tsx)\n\nProvides a simple, non-intrusive way of setting up localized routes. Returns localized `\u003cRoute/\u003e`s\nor `\u003cRedirect/\u003e`s components given the `routes` prop config.\n\nIf `\u003cLocalizedRoutes/\u003e` is used, you need not wrap your RouterConfig with `\u003cRouter/\u003e` or\n`\u003cBrowserRouter/\u003e` as this is done within `\u003cLocaleProvider/\u003e`.\n\n`\u003cLocalizedRoutes/\u003e` is not recursive.\n\n| Props         | Type                                | Description                                                                |\n| ------------- | ----------------------------------- | -------------------------------------------------------------------------- |\n| `routes`      | Array (required)                    | Based on `react-router-dom`'s props                                        |\n| `localize`    | Boolean (optional), default=`true`  | Option to localize URLs (prepend the language code in the URL)             |\n| `applySwitch` | Boolean (optional), default=`false` | Wrap the Route config with `\u003cSwitch/\u003e` components. Required in most cases. |\n\n#### Usage\n\n```tsx\n// RouteConfig.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LocalizedRoutes, Route } from 'k2-react-translate';\n\nconst RouteConfig: React.FunctionComponent\u003c{}\u003e = () =\u003e {\n\tconst routes: Route[] = [\n\t\t{\n\t\t\tpath: '/', // resolves to /:language/, unless localize={false}\n\t\t\texact: true,\n\t\t\tcomponent: Home,\n\t\t},\n\t\t{\n\t\t\tpath: '/about', // resolves to /:language/about, unless localize={false}\n\t\t\tcomponent: About,\n\t\t\tlocalize: true, // should override \u003cLocalizedRoutes localize={[true|false]} /\u003e\n\t\t},\n\t\t{\n\t\t\t// Redirect props\n\t\t\tto: '/page-not-found', // resolves to /:language/page-not-found, unless localize={false}\n\t\t},\n\t];\n\n\treturn (\n\t\t\u003cdiv\u003e\n\t\t\t\u003cLocalizedRoutes applySwitch={true} routes={routes} /\u003e\n\t\t\u003c/div\u003e\n\t);\n};\n```\n\n---\n\n### `\u003cLocalizedRoute/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LocalizedRoute.tsx)\n\nA localized wrapper to `react-router-dom`'s `Route`.\n\nYou wouldn't need to use `\u003cLocalizedRoute/\u003e` if [`\u003cLocalizedRoutes/\u003e`](#localizedroutes---source) is\nconfigured.\n\n| Props      | Type                               | Description                                                                                 |\n| ---------- | ---------------------------------- | ------------------------------------------------------------------------------------------- |\n| ...props   | Object                             | Standard `\u003cRoute/\u003e` component [props](https://reacttraining.com/react-router/web/api/Route) |\n| `localize` | Boolean (optional), default=`true` | Option to localize URLs (prepend the language code in the URL)                              |\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LocalizedRoute } from 'k2-react-translate';\nimport { Home } from './Home';\nimport { About } from './About';\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e = () =\u003e {\n\treturn (\n\t\t\u003cdiv\u003e\n\t\t\t// automatically resolves to the \"/:language\" // if \"en\" is active, then \"/en\"\n\t\t\t\u003cLocalizedRoute path=\"/\" exact component={Home} /\u003e\n\t\t\t// automatically resolves to the \"/:language/about-us\" // if \"en\" is active, then\n\t\t\t\"/en/about-us\"\n\t\t\t\u003cLocalizedRoute path=\"/about\" component={About} /\u003e\n\t\t\u003c/div\u003e\n\t);\n};\n```\n\n---\n\n### `\u003cLocalizedLink/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LocalizedLink.tsx)\n\nA localized wrapper to `react-router-dom`'s `\u003cLink/\u003e`.\n\n| Props      | Type                               | Description                                                                               |\n| ---------- | ---------------------------------- | ----------------------------------------------------------------------------------------- |\n| ...props   | Object                             | Standard `\u003cLink/\u003e` component [props](https://reacttraining.com/react-router/web/api/Link) |\n| `localize` | Boolean (optional), default=`true` | Option to localize URLs (prepend the language code in the URL)                            |\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LocalizedLink } from 'k2-react-translate';\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e = () =\u003e {\n\treturn (\n\t\t\u003cdiv\u003e\n\t\t\t// automatically resolves to the \"/:language/about-us\" // if \"en\" is active, then\n\t\t\t\"/en/about-us\"\n\t\t\t\u003cLocalizedLink to=\"/about-us\"\u003eAbout Us\u003c/LocalizedLink\u003e\n\t\t\u003c/div\u003e\n\t);\n};\n```\n\n---\n\n### `\u003cLocalizedRedirect/\u003e` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/LocalizedRedirect.tsx)\n\nA localized wrapper to `react-router-dom`'s `\u003cRedirect/\u003e`.\n\n| Props      | Type                               | Description                                                                                       |\n| ---------- | ---------------------------------- | ------------------------------------------------------------------------------------------------- |\n| ...props   | Object                             | Standard `\u003cRedirect/\u003e` component [props](https://reacttraining.com/react-router/web/api/Redirect) |\n| `localize` | Boolean (optional), default=`true` | Option to localize URLs (prepend the language code in the URL)                                    |\n\n#### Usage\n\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LocalizedRedirect } from 'k2-react-translate';\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e = () =\u003e {\n\t// automatically resolves to the \"/:language/page-not-found\"\n\t// if \"en\" is active, then \"/en/page-not-found\"\n\tif (someCondition) {\n\t\treturn \u003cLocalizedRedirect to=\"/page-not-found\"\u003eAbout Us\u003c/LocalizedRedirect\u003e;\n\t}\n\n\t// alternatively, `props.history.push` would also resolve URLs by current langauge\n\n\treturn \u003cdiv /\u003e;\n};\n```\n\n\u003c!--\n### `localizedHistory` - [source](https://github.com/kareemkibue/k2-react-translate/blob/master/src/localizedHistory.ts)\n\nA localized instance of\n\nProps | Type | Description\n---|---|---\n...props | Object | Standard `\u003cRoute/\u003e` component [props](https://reacttraining.com/react-router/web/api/Redirect)\n`localize` | Boolean (optional), default=`true`  | Option to localize URLs (prepend the language code in the URL)\n\n#### Usage\n```tsx\n// MyComponent.tsx\nimport * as React from 'react'; // standard TypeScript syntax\nimport { LocalizedRedirect } from 'k2-react-translate';\n\nconst MyComponent: React.FunctionComponent\u003c{}\u003e=()=\u003e{\n\n    // automatically resolves to the \"/:language/page-not-found\"\n    // if \"en\" is active, then \"/en/page-not-found\"\n    if (someCondition){\n        return \u003cLocalizedRedirect to=\"/page-not-found\"\u003e\n            About Us\n        \u003c/LocalizedRedirect\u003e;\n    }\n\n    // alternatively, the `props.history` function would resolve URLs from current langauge\n\n    return \u003cdiv/\u003e;\n}\n```\n\n--\u003e\n\n## Development\n\n-   Run `yarn` on the root of the repository.\n-   Run `yarn start` to start the project.\n-   Run `yarn test:watch` to ammend tests.\n\n## Known Issues\n\n-   Routing works with `\u003cBrowserRouter/\u003e` for now\n-   `\u003cLocalizedNavLink/\u003e` is yet to be adapted from `\u003cNavLink/\u003e`. `\u003cLocalizedLink\u003e` works equally as\n    well, with the exception of the `activeClassName` prop.\n\n\u003c!--\n## Changelog\n\n| Version | Log                                                                                                                 |\n| ------- | ------------------------------------------------------------------------------------------------------------------- |\n| 0.5.0   | - Add `localizeUrl` LocaleProvider _prop_\u003cbr\u003e- Add optional save language to LocalStorage if `localizeUrl` is false |\n| 0.4.1   | - Add missing TypeScript declarations                                                                               |\n| 0.4.0   | - Cleanup static LocaleProvider language codes\u003cbr\u003e- Add examples\u003cbr\u003e- Update docs                                   |\n| 0.3.0   | - Update docs                                                                                                       |\n| 0.2.0   | - Publish missing sub-modules                                                                                       |\n| 0.1.0   | - Initial publishd                                                                                                  |\n\n--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkareemkibue%2Fk2-react-translate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkareemkibue%2Fk2-react-translate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkareemkibue%2Fk2-react-translate/lists"}