diff --git a/markdown/dev/guides/markdown/custom-components/en.md b/markdown/dev/guides/markdown/custom-components/en.md index a1ed7e59ed2..bb2ee4e4bc1 100644 --- a/markdown/dev/guides/markdown/custom-components/en.md +++ b/markdown/dev/guides/markdown/custom-components/en.md @@ -33,8 +33,10 @@ frontend [label="FreeSewing\nFrontend" shape="component" color="oc-violet"] user [label="User" shape="egg" color="oc-blue-2" style="filled"] extra [label="I am an example" shape="box" color="oc-pink-2"] dot [label="Me too!" shape="plaintext"] +i18n [label="i18n:docs" shape="signature" color="oc-red"] extra -> dot +extra -> i18n dot -> db [lhead=cluster_pem dir=back] frontend -> api frontend -> strapi [color="oc-indigo"] @@ -70,40 +72,26 @@ the custom component: ... ``` -Which yields this result: +Which does away with all the quirkyness: ```dot rankdir="LR" compound=true -subgraph cluster_pem { - label="I am a box" - fontsize=24 - color="oc-gray" - style="dashed" - api [label="Backend API" shape="box3d" style="dashed" color="oc-teal"] - strapi [label="Strapi" shape="box3d" style="dashed" color="oc-teal"] - db [label="Database" shape="cylinder" style="dashed" color="oc-grape"] - api -> db - strapi -> db -} -frontend [label="FreeSewing\nFrontend" shape="component" color="oc-violet"] -user [label="User" shape="egg" color="oc-blue-2" style="filled"] -extra [label="I am an example" shape="box" color="oc-pink-2"] -dot [label="Me too!" shape="plaintext"] +box1 [label="Plain" shape="box" color="oc-orange"] +box2 [label="Boring!" shape="egg" color="oc-indigo"] +box3 [label="Bleh" shape="box3d" color="oc-green"] -extra -> dot -dot -> db [lhead=cluster_pem dir=back] -frontend -> api -frontend -> strapi [color="oc-indigo"] -user -> frontend +box1 -> box2 +box1 -> box3 [dir=back style="dashed" label="Not a fan of this style"] +box2 -> box3 ``` An example graph using the **Dot** custom component -### Help with colors +### Using colors Colors make everything prettier, but dot expects you to specify them as you would in HTML, and juggling all those hex-codes becomes a chore. @@ -121,9 +109,14 @@ component will also override that with `currentColor` so that the default also works in dark mode -### Translation +### Using translation -Not yet implemented +While freesewing.dev is only available in English, you can also use this on +freesewing.org which uses translation. + +You can use the `i18n:` prefix followed by the translation key. For example +`i18n:docs` will look up the `docs` key in the default namespace. Whereas +`i18n:errors:example` will lookup the `example` keys in the `errors` namespace. ## Example diff --git a/packages/freesewing.dev/i18n.config.mjs b/packages/freesewing.dev/i18n.config.mjs new file mode 100644 index 00000000000..2dec6ed7918 --- /dev/null +++ b/packages/freesewing.dev/i18n.config.mjs @@ -0,0 +1,3 @@ +import i18n from '../freesewing.shared/config/i18n.config.mjs' + +export default i18n() diff --git a/packages/freesewing.dev/next.config.mjs b/packages/freesewing.dev/next.config.mjs index 3fa7225d272..fd1138f2497 100644 --- a/packages/freesewing.dev/next.config.mjs +++ b/packages/freesewing.dev/next.config.mjs @@ -1,7 +1,7 @@ import configBuilder from '../freesewing.shared/config/next.mjs' -//import i18nConfig from './next-i18next.config.js' +import i18nConfig from './next-i18next.config.js' const config = configBuilder('dev') -//config.i18n = i18nConfig.i18n +config.i18n = i18nConfig.i18n export default config diff --git a/packages/freesewing.dev/pages/[...mdxslug].js b/packages/freesewing.dev/pages/[...mdxslug].js index 4c8cfdfa983..b6169dbce07 100644 --- a/packages/freesewing.dev/pages/[...mdxslug].js +++ b/packages/freesewing.dev/pages/[...mdxslug].js @@ -44,7 +44,7 @@ const MdxPage = props => { )}
- +
diff --git a/packages/freesewing.dev/pages/_app.js b/packages/freesewing.dev/pages/_app.js index 2fe2f6665f8..7e91632721b 100644 --- a/packages/freesewing.dev/pages/_app.js +++ b/packages/freesewing.dev/pages/_app.js @@ -1,7 +1,6 @@ import 'shared/styles/globals.css' -//import { appWithTranslation } from 'next-i18next' +import { appWithTranslation } from 'next-i18next' const FreeSewingDev = ({ Component, pageProps }) => -//export default appWithTranslation(FreeSewingDev) -export default FreeSewingDev +export default appWithTranslation(FreeSewingDev) diff --git a/packages/freesewing.lab/i18n.config.mjs b/packages/freesewing.lab/i18n.config.mjs index 8349a5cafd2..2dec6ed7918 100644 --- a/packages/freesewing.lab/i18n.config.mjs +++ b/packages/freesewing.lab/i18n.config.mjs @@ -1,3 +1,3 @@ import i18n from '../freesewing.shared/config/i18n.config.mjs' -export default i18n +export default i18n() diff --git a/packages/freesewing.shared/components/mdx/dot.js b/packages/freesewing.shared/components/mdx/dot.js index 227a3108522..cbaeff11d4f 100644 --- a/packages/freesewing.shared/components/mdx/dot.js +++ b/packages/freesewing.shared/components/mdx/dot.js @@ -4,7 +4,7 @@ import { Module, render } from 'viz.js/full.render.js' import coarse from './dot-rough.js' import Popout from 'shared/components/popout' import oc from 'open-color' -//import { useTranslation } from 'next-i18next' +import { useTranslation } from 'next-i18next' // Some regex voodoo to allow people to use open-color // colors like oc-orange-5 and make it 'just work' @@ -18,30 +18,25 @@ const colorDot = dot => dot // More regex voodoo to handle translation // Looking for prefix i18n: and terminated by ther space of " -// FIXME: Handle translation -//const regexC = /i18n:([^ "]+)/g -//const getTranslation = (a, b, t) => { -// console.log({a,b}, t('aboutFreesewing'), t) -// return t('aboutFreesewing') -//} -//const i18nDot = (dot, t) => dot.replace(regexC, (a,b) => getTranslation(a, b, t)) +const regexC = /i18n:([^ "]+)/g +const i18nDot = (dot, t) => dot.replace(regexC, (a,b) => t(b)) const Dot = props => { - //const { t } = useTranslation(['base']) + const { t } = useTranslation(['app']) const { plain=false } = props const wrapDot = dot => { if (dot.slice(0,7) === 'digraph') return dot return plain - ? `digraph G { bgcolor=transparent; ${colorDot(dot)} }` + ? `digraph G { bgcolor=transparent; ${i18nDot(colorDot(dot), t)} }` : `digraph G { graph [fontname = "Indie Flower"]; node [fontname = "Indie Flower"]; edge [fontname = "Indie Flower"]; - bgcolor=transparent; ${colorDot(dot)} }` + bgcolor=transparent; ${i18nDot(colorDot(dot), t)} }` } // Extract code/caption from props diff --git a/packages/freesewing.shared/components/mdx/index.js b/packages/freesewing.shared/components/mdx/index.js index 2403c456c23..09592f384bf 100644 --- a/packages/freesewing.shared/components/mdx/index.js +++ b/packages/freesewing.shared/components/mdx/index.js @@ -10,7 +10,7 @@ import rendertest from '@freesewing/rendertest' import tutorial from '@freesewing/tutorial' -const mdxCustomComponents = (app) => ({ +const mdxCustomComponents = (app, t) => ({ // Custom components Example: props => { +const MdxWrapper = ({mdx, app, t, components={}}) => { const [mdxModule, setMdxModule] = useState() @@ -31,7 +31,7 @@ const MdxWrapper = ({mdx, app, components={}}) => { * extra components via props */ const allComponents = { - ...customComponents(app), + ...customComponents(app, t), ...components } diff --git a/packages/freesewing.shared/config/i18n.config.mjs b/packages/freesewing.shared/config/i18n.config.mjs index 46ad0bbbf2b..6510719153c 100644 --- a/packages/freesewing.shared/config/i18n.config.mjs +++ b/packages/freesewing.shared/config/i18n.config.mjs @@ -1,13 +1,13 @@ // See: https://github.com/isaachinman/next-i18next -const i18n = { +const i18n = (locales = ['en', 'de', 'es', 'fr', 'nl']) => ({ defaultLocale: 'en', - locales: ['en', 'de', 'es', 'fr', 'nl'], + locales, defaultNS: 'app', interpolation: { prefix: '{', suffix: '}', } -} +}) export default i18n