2.1.17 • Published 12 months ago

typed-locale-keys v2.1.17

Weekly downloads
709
License
MIT
Repository
github
Last release
12 months ago

Typed-Locale-Keys

Generate typescript code from locale keys JSON.

Getting Started

tlk codegen [INPUT_JSON_FILE] --output [DESTINATION_DIRECTORY]

How to use

In package.json

Add to scripts

// package.json
{
  "scripts": {
    "pretest": "tlk codegen [ENTRY-DIRECTORY]/messages_en.json -o [OUTPUT-DIRECTORY]"
  }
}

Initialize generated file with translate function

const localeKeys = LocaleKeys(i18nConf.t.bind(i18nConf));

Read interpolation arguments using single curly instead of of double

default is double curly braces. To use single mode pass:

$ tlk codegen --singleCurlyBraces

or setting in configuration package.json:

// package.json
{
  "typedLocaleKeys": {
    "singleCurlyBraces" : true //optional field. default is false
  }
}

Example

input: messages_en.json:

{
  "common": {
    "loggedIn": {
      "message": "Hey, {{username}}, you have successfully logged in!"
    }
  },
  "readingWarning": "{{reader}} reads message from {{writer}}"
}

output:

/* eslint-disable */
/* tslint:disable */
export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
  return {
    common: {
      loggedIn: {
        message: (data: Record<'username', unknown>) => t('common.loggedIn.message', data),
      },
    },
    readingWarning: (data: Record<'reader' | 'writer', unknown>) => t('readingWarning', data),
  };
}

export type ILocaleKeys = ReturnType<typeof LocaleKeys>;

output with React Hook:

/* eslint-disable */
/* tslint:disable */
import React from 'react';

export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
  return {
    common: {
      loggedIn: {
        message: (data: Record<'username', unknown>) => t('common.loggedIn.message', data),
      },
    },
    readingWarning: (data: Record<'reader' | 'writer', unknown>) => t('readingWarning', data),
  };
}

export type ILocaleKeys = ReturnType<typeof LocaleKeys>;

const LocaleKeysContext = React.createContext({} as ILocaleKeys);
export const LocaleKeysProvider: React.FC<{ translateFn?: (...args: unknown[]) => string; localeKeys?: ILocaleKeys }> = ({ 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>;
  };
export const useLocaleKeys = () => React.useContext(LocaleKeysContext);

Configuration file

To read the configuration file cosmiconfig is used so it supports files like .typedlocalekeysrc.json, typedlocalekeys.config.js, package.json etc.:

{
  "typedLocaleKeys": {
    "entries": {
      "GalleryKeys": {
        "source": "./locale/messages_en.json",
        "output": "./dist/gallery"
      },
      "CommonKeys": "./locale/sub/messages_en.json" // for source only
    },
    "primaryOutput": "./dist", // fallback output (after cli's `--output` fallback)
    "singleCurlyBraces" : false //optional field. default is false
    "reactHook": false //optional field. default is false
  }
}

More options:

$ tlk codegen --help


Generates a factory from the keys of a locale.json file

Positionals:
  source  Locale JSON file path                                         [string]

Options:
      --help               Show help                                   [boolean]
      --version            Show version number                         [boolean]
  -o, --output             Distribution directory for generated factory [string]
  -n, --nested             Should create nested object [boolean] [default: true]
  -t, --translate          Should add translate function. NOTE: will wrap value
                           with function               [boolean] [default: true]
      --showTranslations   Add translations as function's comment
                                                       [boolean] [default: true]
  -f, --functionName       Generated function name
                                                [string] [default: "LocaleKeys"]
      --singleCurlyBraces  Read interpolation arguments using single curly
                           instead of double                           [boolean]
      --reactHook          Generate React bindings (Provider and hook) [boolean]
2.1.17

12 months ago

2.1.14

2 years ago

2.1.13

2 years ago

2.1.6

2 years ago

2.1.5

2 years ago

2.1.12

2 years ago

2.1.10

2 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.317

3 years ago

2.0.316

3 years ago

2.0.319

3 years ago

2.0.318

3 years ago

2.0.328

3 years ago

2.0.327

3 years ago

2.0.326

3 years ago

2.0.325

3 years ago

2.0.324

3 years ago

2.0.323

3 years ago

2.0.322

3 years ago

2.0.321

3 years ago

2.0.320

3 years ago

2.0.315

4 years ago

2.0.306

4 years ago

2.0.309

4 years ago

2.0.308

4 years ago

2.0.307

4 years ago

2.0.314

4 years ago

2.0.313

4 years ago

2.0.312

4 years ago

2.0.311

4 years ago

2.0.310

4 years ago

2.0.305

4 years ago

2.0.304

4 years ago

2.0.303

4 years ago

2.0.302

5 years ago

2.0.301

5 years ago

2.0.300

5 years ago

2.0.299

5 years ago

2.0.298

5 years ago

2.0.297

5 years ago

2.0.296

5 years ago

2.0.295

5 years ago

2.0.294

5 years ago

2.0.293

5 years ago

2.0.292

5 years ago

2.0.291

5 years ago

2.0.290

5 years ago

2.0.289

5 years ago

2.0.288

5 years ago

2.0.287

5 years ago

2.0.286

5 years ago

2.0.285

5 years ago

2.0.284

5 years ago

2.0.283

5 years ago

2.0.282

5 years ago

2.0.281

5 years ago

2.0.280

5 years ago

2.0.279

5 years ago

2.0.278

5 years ago

2.0.277

5 years ago

2.0.276

5 years ago

2.0.275

5 years ago

2.0.274

5 years ago

2.0.273

5 years ago

2.0.272

5 years ago

2.0.271

5 years ago

2.0.270

5 years ago

2.0.269

5 years ago

2.0.268

5 years ago

2.0.267

5 years ago

2.0.266

5 years ago

2.0.265

5 years ago

2.0.264

5 years ago

2.0.263

5 years ago

2.0.262

5 years ago

2.0.261

5 years ago

2.0.260

5 years ago

2.0.259

5 years ago

2.0.258

5 years ago

2.0.257

5 years ago

2.0.256

5 years ago

2.0.255

5 years ago

2.0.254

5 years ago

2.0.253

5 years ago

2.0.252

5 years ago

2.0.251

5 years ago

2.0.250

5 years ago

2.0.249

5 years ago

2.0.248

5 years ago

2.0.247

5 years ago

2.0.246

5 years ago

2.0.245

5 years ago

2.0.244

5 years ago

2.0.243

5 years ago

2.0.242

5 years ago

2.0.241

5 years ago

2.0.240

5 years ago

2.0.239

5 years ago

2.0.238

5 years ago

2.0.237

5 years ago

2.0.236

5 years ago

2.0.235

5 years ago

2.0.234

5 years ago

2.0.233

5 years ago

2.0.232

5 years ago

2.0.231

5 years ago

2.0.230

5 years ago

2.0.229

5 years ago

2.0.228

5 years ago

2.0.227

5 years ago

2.0.226

5 years ago

2.0.225

5 years ago

2.0.224

5 years ago

2.0.223

5 years ago

2.0.222

5 years ago

2.0.221

5 years ago

2.0.220

5 years ago

2.0.219

5 years ago

2.0.218

5 years ago

2.0.217

5 years ago

2.0.216

5 years ago

2.0.215

5 years ago

2.0.214

5 years ago

2.0.213

5 years ago

2.0.212

5 years ago

2.0.211

5 years ago

2.0.210

5 years ago

2.0.209

5 years ago

2.0.208

5 years ago

2.0.207

5 years ago

2.0.206

5 years ago

2.0.205

5 years ago

2.0.204

5 years ago

2.0.203

5 years ago

2.0.202

5 years ago

2.0.201

5 years ago

2.0.200

5 years ago

2.0.199

5 years ago

2.0.198

5 years ago

2.0.197

5 years ago

2.0.196

5 years ago

2.0.195

5 years ago

2.0.194

5 years ago

2.0.193

5 years ago

2.0.192

5 years ago

2.0.191

5 years ago

2.0.190

5 years ago

2.0.189

5 years ago

2.0.188

5 years ago

2.0.187

5 years ago

2.0.186

5 years ago

2.0.185

5 years ago

2.0.184

5 years ago

2.0.183

5 years ago

2.0.182

5 years ago

2.0.181

5 years ago

2.0.180

5 years ago

2.0.179

5 years ago

2.0.178

5 years ago

2.0.177

5 years ago

2.0.176

5 years ago

2.0.175

5 years ago

2.0.174

5 years ago

2.0.173

6 years ago

2.0.172

6 years ago

2.0.171

6 years ago

2.0.170

6 years ago

2.0.169

6 years ago

2.0.168

6 years ago

2.0.167

6 years ago

2.0.166

6 years ago

2.0.165

6 years ago

2.0.164

6 years ago

2.0.163

6 years ago

2.0.162

6 years ago

2.0.161

6 years ago

2.0.160

6 years ago

2.0.159

6 years ago

2.0.158

6 years ago

2.0.157

6 years ago

2.0.156

6 years ago

2.0.155

6 years ago

2.0.154

6 years ago

2.0.153

6 years ago

2.0.152

6 years ago

2.0.151

6 years ago

2.0.150

6 years ago

2.0.149

6 years ago

2.0.148

6 years ago

2.0.147

6 years ago

2.0.146

6 years ago

2.0.145

6 years ago

2.0.144

6 years ago

2.0.143

6 years ago

2.0.142

6 years ago

2.0.141

6 years ago

2.0.140

6 years ago

2.0.139

6 years ago

2.0.138

6 years ago

2.0.137

6 years ago

2.0.136

6 years ago

2.0.135

6 years ago

2.0.134

6 years ago

2.0.133

6 years ago

2.0.132

6 years ago

2.0.131

6 years ago

2.0.130

6 years ago

2.0.129

6 years ago

2.0.128

6 years ago

2.0.127

6 years ago

2.0.126

6 years ago

2.0.125

6 years ago

2.0.124

6 years ago

2.0.123

6 years ago

2.0.122

6 years ago

2.0.121

6 years ago

2.0.120

6 years ago

2.0.119

6 years ago

2.0.118

6 years ago

2.0.117

6 years ago

2.0.116

6 years ago

2.0.115

6 years ago

2.0.114

6 years ago

2.0.113

6 years ago

2.0.112

6 years ago

2.0.111

6 years ago

2.0.110

6 years ago

2.0.109

6 years ago

2.0.108

6 years ago

2.0.107

6 years ago

2.0.106

6 years ago

2.0.105

6 years ago

2.0.104

6 years ago

2.0.103

6 years ago

2.0.102

6 years ago

2.0.101

6 years ago

2.0.100

6 years ago

2.0.99

6 years ago

2.0.98

6 years ago

2.0.97

6 years ago

2.0.96

6 years ago

2.0.95

6 years ago

2.0.94

6 years ago

2.0.93

6 years ago

2.0.92

6 years ago

2.0.91

6 years ago

2.0.90

6 years ago

2.0.89

6 years ago

2.0.88

6 years ago

2.0.87

6 years ago

2.0.86

6 years ago

2.0.85

6 years ago

2.0.84

6 years ago

2.0.83

6 years ago

2.0.82

6 years ago

2.0.81

6 years ago

2.0.80

6 years ago

2.0.79

6 years ago

2.0.78

6 years ago

2.0.77

6 years ago

2.0.76

6 years ago

2.0.75

6 years ago

2.0.74

6 years ago

2.0.73

6 years ago

2.0.72

6 years ago

2.0.71

6 years ago

2.0.70

6 years ago

2.0.69

6 years ago

2.0.68

6 years ago

2.0.67

6 years ago

2.0.66

6 years ago

2.0.65

6 years ago

2.0.64

6 years ago

2.0.63

6 years ago

2.0.62

6 years ago

2.0.61

6 years ago

2.0.60

6 years ago

2.0.59

6 years ago

2.0.58

6 years ago

2.0.57

6 years ago

2.0.56

6 years ago

2.0.55

6 years ago

2.0.54

6 years ago

2.0.53

6 years ago

2.0.52

6 years ago

2.0.51

6 years ago

2.0.50

6 years ago

2.0.49

6 years ago

2.0.48

6 years ago

2.0.47

6 years ago

2.0.46

6 years ago

2.0.45

6 years ago

2.0.44

6 years ago

2.0.43

6 years ago

2.0.42

6 years ago

2.0.41

6 years ago

2.0.40

6 years ago

2.0.39

6 years ago

2.0.38

6 years ago

2.0.37

6 years ago

2.0.36

6 years ago

2.0.35

6 years ago

2.0.34

6 years ago

2.0.33

6 years ago

2.0.32

6 years ago

2.0.31

6 years ago

2.0.30

6 years ago

2.0.29

6 years ago

2.0.28

6 years ago

2.0.27

6 years ago

2.0.26

6 years ago

2.0.25

6 years ago

2.0.24

6 years ago

2.0.23

6 years ago

2.0.22

6 years ago

2.0.21

6 years ago

2.0.20

6 years ago

2.0.19

6 years ago

2.0.18

6 years ago

2.0.17

6 years ago

2.0.16

6 years ago

2.0.15

6 years ago

2.0.14

6 years ago

2.0.13

6 years ago

2.0.12

6 years ago

2.0.11

6 years ago

2.0.10

6 years ago

2.0.9

6 years ago

2.0.8

6 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

2.0.4

6 years ago

2.0.3

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.0.37

6 years ago

1.0.36

6 years ago

1.0.35

6 years ago

1.0.34

6 years ago

1.0.33

6 years ago

1.0.32

6 years ago

1.0.31

6 years ago

1.0.30

6 years ago

1.0.29

6 years ago

1.0.28

6 years ago

1.0.27

6 years ago

1.0.26

6 years ago

1.0.25

6 years ago

1.0.24

6 years ago

1.0.23

6 years ago

1.0.22

6 years ago

1.0.21

6 years ago

1.0.20

6 years ago

1.0.19

6 years ago

1.0.18

6 years ago

1.0.17

6 years ago

1.0.16

6 years ago

1.0.15

6 years ago

1.0.14

6 years ago

1.0.13

6 years ago

1.0.12

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago