Skip to content

Instantly share code, notes, and snippets.

View vkbansal's full-sized avatar
💭
I may be slow to respond.

Vivek Kumar Bansal vkbansal

💭
I may be slow to respond.
View GitHub Profile
@vkbansal
vkbansal / index.tsx.diff
Last active January 11, 2022 09:47
string-ext-05
// index.tsx
import HomePage from "./HomePage";
import AboutPage from "./AboutPage";
import Nav from "./Nav";
+ import strings from "./strings.yaml";
+ import { StringsContextProvider } from "./StringsContext";
function App() {
return (
+ <StringsContextProvider data={strings}>
<div style={{ maxWidth: "500px" }}>
@vkbansal
vkbansal / context-01.tsx
Last active January 11, 2022 09:48
String Externalisation Snippets
// StringsContext.tsx
import { createContext } from "react";
// initialize the context
const StringsContext = createContext({});
// props for StringsContextProvider
export interface StringsContextProviderProps {
data: Record<string, any>;
}
// a wrapper for `StringsContext.Provider` for better API
export function StringsContextProvider(
@vkbansal
vkbansal / Nav.tesx.diff
Created January 11, 2022 09:49
string-ext-07
// usage in Nav.tsx
import React from "react";
import { Link } from "react-router-dom";
+ import { useLocaleStrings } from "./StringsContext";
export default function Nav(): React.ReactElement {
+ const { getString } = useLocaleStrings();
return (
@vkbansal
vkbansal / StringsContext.tsx.diff
Created January 11, 2022 09:53
string-ext-08
// StringsContext.tsx
+ import has from "lodash.has";
+ import get from "lodash.get";
export function useLocaleStrings() {
const strings = useStringsContext();
return {
getString(key: string): string {
- if (key in strings) {
+ if (has(strings, key)) {
// HomePage.tsx
import React from "react";
import { useLocaleStrings } from "./StringsContext";
export default function HomePage(): React.ReactElement {
const { getString } = useLocaleStrings();
return (
<div>
<h1>Home</h1>
// StringsContext.tsx
export interface LocaleStringProps extends React.HTMLAttributes<any> {
strKey: string;
as?: keyof JSX.IntrinsicElements;
}
export function LocaleString(props: LocaleStringProps): React.ReactElement {
const { strKey, as, ...rest } = props;
const { getString } = useLocaleStrings();
const Component = as || "span";
// HomePage.tsx
import React from "react";
- import { useLocaleStrings } from "./StringsContext";
+ import { useLocaleStrings, LocaleString } from "./StringsContext";
export default function HomePage(): React.ReactElement {
const { getString } = useLocaleStrings();
return (
<div>
<h1>Home</h1>
<p>{getString("homePageContent.para1")}</p>
// StringsContext.tsx
+ import mustache from "mustache";
export interface UseLocaleStringsReturn {
- getString(key: string): string;
+ getString(key: string, variables?: any): string;
}
export function useLocaleStrings() {
const strings = useStringsContext();
# strings.yaml
homePageContent:
para1: |
+ Hello {{name}}
Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquam, eos
animi. Corporis harum quaerat dicta possimus illum aut unde laborum
excepturi suscipit quibusdam perspiciatis dolorum alias, exercitationem
similique illo? Distinctio.
para2: |
+ Hello {{name}}
import React from "react";
import { useLocaleStrings, LocaleString } from "./StringsContext";
export default function HomePage(): React.ReactElement {
const { getString } = useLocaleStrings();
return (
<div>
<h1>Home</h1>
- <p>{getString("homePageContent.para1")}</p>