Skip to content

Commit

Permalink
docs: update docs
Browse files Browse the repository at this point in the history
  • Loading branch information
tkvlnk committed Dec 4, 2024
1 parent 1716a46 commit 24e16a0
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 14 deletions.
56 changes: 43 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,33 @@ output:
```typescript
/* eslint-disable */
/* tslint:disable */
export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
return {
export type ILocaleKeys = {
common: {
loggedIn: {
message: (data: Record<'username', unknown>) => t('common.loggedIn.message', data),
message: (data: Record<'username', unknown>) => string,
},
},
readingWarning: (data: Record<'reader' | 'writer', unknown>) => t('readingWarning', data),
readingWarning: (data: Record<'reader' | 'writer', unknown>) => string,
};
}
const createProxyImpl = <R extends string>(
t = (...[k]: unknown[]) => k as R,
prevKeys = ''
): unknown =>
new Proxy((...args: unknown[]) => t(prevKeys, ...args), {
get: (_, key: string): unknown => {
let nextKey = prevKeys;

if (key !== '$value') {
nextKey = prevKeys ? [prevKeys, key].join('.') : key;
}

return createProxyImpl(t, nextKey);
},
});

export type ILocaleKeys = ReturnType<typeof LocaleKeys>;
export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
return createProxyImpl(t) as ILocaleKeys;
}

```

Expand All @@ -86,21 +101,36 @@ output with React Hook:
/* tslint:disable */
import React from 'react';

export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
return {
export type ILocaleKeys = {
common: {
loggedIn: {
message: (data: Record<'username', unknown>) => t('common.loggedIn.message', data),
message: (data: Record<'username', unknown>) => string,
},
},
readingWarning: (data: Record<'reader' | 'writer', unknown>) => t('readingWarning', data),
readingWarning: (data: Record<'reader' | 'writer', unknown>) => string,
};
}
const createProxyImpl = <R extends string>(
t = (...[k]: unknown[]) => k as R,
prevKeys = ''
): unknown =>
new Proxy((...args: unknown[]) => t(prevKeys, ...args), {
get: (_, key: string): unknown => {
let nextKey = prevKeys;

if (key !== '$value') {
nextKey = prevKeys ? [prevKeys, key].join('.') : key;
}

return createProxyImpl(t, nextKey);
},
});

export type ILocaleKeys = ReturnType<typeof LocaleKeys>;
export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
return createProxyImpl(t) as ILocaleKeys;
}

const LocaleKeysContext = React.createContext({} as ILocaleKeys);
export const LocaleKeysProvider: React.FC<{ translateFn?: (...args: unknown[]) => string; localeKeys?: ILocaleKeys }> = ({ translateFn, localeKeys, children }) => {
export const LocaleKeysProvider: React.FC<{ translateFn?: (...args: unknown[]) => string; localeKeys?: ILocaleKeys; children?: React.ReactNode }> = ({ translateFn, localeKeys, children }) => {
if (!translateFn && !localeKeys) { throw new Error('Either translateFn or localeKeys must be provided') }
const value = (typeof translateFn === 'function' ? LocaleKeys(translateFn) : localeKeys) as ILocaleKeys
return <LocaleKeysContext.Provider value={value}>{children}</LocaleKeysContext.Provider>;
Expand Down
2 changes: 1 addition & 1 deletion scripts/README.template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Typed-Local-Keys
# Typed-Locale-Keys

Generate typescript code from locale keys JSON.

Expand Down

0 comments on commit 24e16a0

Please sign in to comment.