2.1.14 • Published 10 months ago

typed-locale-keys v2.1.14

Weekly downloads
709
License
MIT
Repository
github
Last release
10 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.14

10 months ago

2.1.13

10 months ago

2.1.6

1 year ago

2.1.5

1 year ago

2.1.12

12 months ago

2.1.10

1 year ago

2.1.1

2 years ago

2.1.0

2 years ago

2.0.317

2 years ago

2.0.316

2 years ago

2.0.319

2 years ago

2.0.318

2 years ago

2.0.328

2 years ago

2.0.327

2 years ago

2.0.326

2 years ago

2.0.325

2 years ago

2.0.324

2 years ago

2.0.323

2 years ago

2.0.322

2 years ago

2.0.321

2 years ago

2.0.320

2 years ago

2.0.315

3 years ago

2.0.306

3 years ago

2.0.309

3 years ago

2.0.308

3 years ago

2.0.307

3 years ago

2.0.314

3 years ago

2.0.313

3 years ago

2.0.312

3 years ago

2.0.311

3 years ago

2.0.310

3 years ago

2.0.305

3 years ago

2.0.304

3 years ago

2.0.303

3 years ago

2.0.302

4 years ago

2.0.301

4 years ago

2.0.300

4 years ago

2.0.299

4 years ago

2.0.298

4 years ago

2.0.297

4 years ago

2.0.296

4 years ago

2.0.295

4 years ago

2.0.294

4 years ago

2.0.293

4 years ago

2.0.292

4 years ago

2.0.291

4 years ago

2.0.290

4 years ago

2.0.289

4 years ago

2.0.288

4 years ago

2.0.287

4 years ago

2.0.286

4 years ago

2.0.285

4 years ago

2.0.284

4 years ago

2.0.283

4 years ago

2.0.282

4 years ago

2.0.281

4 years ago

2.0.280

4 years ago

2.0.279

4 years ago

2.0.278

4 years ago

2.0.277

4 years ago

2.0.276

4 years ago

2.0.275

4 years ago

2.0.274

4 years ago

2.0.273

4 years ago

2.0.272

4 years ago

2.0.271

4 years ago

2.0.270

4 years ago

2.0.269

4 years ago

2.0.268

4 years ago

2.0.267

4 years ago

2.0.266

4 years ago

2.0.265

4 years ago

2.0.264

4 years ago

2.0.263

4 years ago

2.0.262

4 years ago

2.0.261

4 years ago

2.0.260

4 years ago

2.0.259

4 years ago

2.0.258

4 years ago

2.0.257

4 years ago

2.0.256

4 years ago

2.0.255

4 years ago

2.0.254

4 years ago

2.0.253

4 years ago

2.0.252

4 years ago

2.0.251

4 years ago

2.0.250

4 years ago

2.0.249

4 years ago

2.0.248

4 years ago

2.0.247

4 years ago

2.0.246

4 years ago

2.0.245

4 years ago

2.0.244

4 years ago

2.0.243

4 years ago

2.0.242

4 years ago

2.0.241

4 years ago

2.0.240

4 years ago

2.0.239

4 years ago

2.0.238

4 years ago

2.0.237

4 years ago

2.0.236

4 years ago

2.0.235

4 years ago

2.0.234

4 years ago

2.0.233

4 years ago

2.0.232

4 years ago

2.0.231

4 years ago

2.0.230

4 years ago

2.0.229

4 years ago

2.0.228

4 years ago

2.0.227

4 years ago

2.0.226

4 years ago

2.0.225

4 years ago

2.0.224

4 years ago

2.0.223

4 years ago

2.0.222

4 years ago

2.0.221

4 years ago

2.0.220

4 years ago

2.0.219

4 years ago

2.0.218

4 years ago

2.0.217

4 years ago

2.0.216

4 years ago

2.0.215

4 years ago

2.0.214

4 years ago

2.0.213

4 years ago

2.0.212

4 years ago

2.0.211

4 years ago

2.0.210

4 years ago

2.0.209

4 years ago

2.0.208

4 years ago

2.0.207

4 years ago

2.0.206

4 years ago

2.0.205

4 years ago

2.0.204

4 years ago

2.0.203

4 years ago

2.0.202

4 years ago

2.0.201

4 years ago

2.0.200

4 years ago

2.0.199

4 years ago

2.0.198

4 years ago

2.0.197

4 years ago

2.0.196

4 years ago

2.0.195

4 years ago

2.0.194

4 years ago

2.0.193

4 years ago

2.0.192

4 years ago

2.0.191

4 years ago

2.0.190

4 years ago

2.0.189

4 years ago

2.0.188

4 years ago

2.0.187

4 years ago

2.0.186

4 years ago

2.0.185

4 years ago

2.0.184

4 years ago

2.0.183

4 years ago

2.0.182

4 years ago

2.0.181

4 years ago

2.0.180

4 years ago

2.0.179

4 years ago

2.0.178

4 years ago

2.0.177

4 years ago

2.0.176

4 years ago

2.0.175

4 years ago

2.0.174

4 years ago

2.0.173

4 years ago

2.0.172

4 years ago

2.0.171

4 years ago

2.0.170

4 years ago

2.0.169

4 years ago

2.0.168

4 years ago

2.0.167

4 years ago

2.0.166

4 years ago

2.0.165

4 years ago

2.0.164

4 years ago

2.0.163

4 years ago

2.0.162

4 years ago

2.0.161

4 years ago

2.0.160

4 years ago

2.0.159

4 years ago

2.0.158

4 years ago

2.0.157

4 years ago

2.0.156

4 years ago

2.0.155

4 years ago

2.0.154

4 years ago

2.0.153

4 years ago

2.0.152

4 years ago

2.0.151

4 years ago

2.0.150

4 years ago

2.0.149

4 years ago

2.0.148

4 years ago

2.0.147

4 years ago

2.0.146

5 years ago

2.0.145

5 years ago

2.0.144

5 years ago

2.0.143

5 years ago

2.0.142

5 years ago

2.0.141

5 years ago

2.0.140

5 years ago

2.0.139

5 years ago

2.0.138

5 years ago

2.0.137

5 years ago

2.0.136

5 years ago

2.0.135

5 years ago

2.0.134

5 years ago

2.0.133

5 years ago

2.0.132

5 years ago

2.0.131

5 years ago

2.0.130

5 years ago

2.0.129

5 years ago

2.0.128

5 years ago

2.0.127

5 years ago

2.0.126

5 years ago

2.0.125

5 years ago

2.0.124

5 years ago

2.0.123

5 years ago

2.0.122

5 years ago

2.0.121

5 years ago

2.0.120

5 years ago

2.0.119

5 years ago

2.0.118

5 years ago

2.0.117

5 years ago

2.0.116

5 years ago

2.0.115

5 years ago

2.0.114

5 years ago

2.0.113

5 years ago

2.0.112

5 years ago

2.0.111

5 years ago

2.0.110

5 years ago

2.0.109

5 years ago

2.0.108

5 years ago

2.0.107

5 years ago

2.0.106

5 years ago

2.0.105

5 years ago

2.0.104

5 years ago

2.0.103

5 years ago

2.0.102

5 years ago

2.0.101

5 years ago

2.0.100

5 years ago

2.0.99

5 years ago

2.0.98

5 years ago

2.0.97

5 years ago

2.0.96

5 years ago

2.0.95

5 years ago

2.0.94

5 years ago

2.0.93

5 years ago

2.0.92

5 years ago

2.0.91

5 years ago

2.0.90

5 years ago

2.0.89

5 years ago

2.0.88

5 years ago

2.0.87

5 years ago

2.0.86

5 years ago

2.0.85

5 years ago

2.0.84

5 years ago

2.0.83

5 years ago

2.0.82

5 years ago

2.0.81

5 years ago

2.0.80

5 years ago

2.0.79

5 years ago

2.0.78

5 years ago

2.0.77

5 years ago

2.0.76

5 years ago

2.0.75

5 years ago

2.0.74

5 years ago

2.0.73

5 years ago

2.0.72

5 years ago

2.0.71

5 years ago

2.0.70

5 years ago

2.0.69

5 years ago

2.0.68

5 years ago

2.0.67

5 years ago

2.0.66

5 years ago

2.0.65

5 years ago

2.0.64

5 years ago

2.0.63

5 years ago

2.0.62

5 years ago

2.0.61

5 years ago

2.0.60

5 years ago

2.0.59

5 years ago

2.0.58

5 years ago

2.0.57

5 years ago

2.0.56

5 years ago

2.0.55

5 years ago

2.0.54

5 years ago

2.0.53

5 years ago

2.0.52

5 years ago

2.0.51

5 years ago

2.0.50

5 years ago

2.0.49

5 years ago

2.0.48

5 years ago

2.0.47

5 years ago

2.0.46

5 years ago

2.0.45

5 years ago

2.0.44

5 years ago

2.0.43

5 years ago

2.0.42

5 years ago

2.0.41

5 years ago

2.0.40

5 years ago

2.0.39

5 years ago

2.0.38

5 years ago

2.0.37

5 years ago

2.0.36

5 years ago

2.0.35

5 years ago

2.0.34

5 years ago

2.0.33

5 years ago

2.0.32

5 years ago

2.0.31

5 years ago

2.0.30

5 years ago

2.0.29

5 years ago

2.0.28

5 years ago

2.0.27

5 years ago

2.0.26

5 years ago

2.0.25

5 years ago

2.0.24

5 years ago

2.0.23

5 years ago

2.0.22

5 years ago

2.0.21

5 years ago

2.0.20

5 years ago

2.0.19

5 years ago

2.0.18

5 years ago

2.0.17

5 years ago

2.0.16

5 years ago

2.0.15

5 years ago

2.0.14

5 years ago

2.0.13

5 years ago

2.0.12

5 years ago

2.0.11

5 years ago

2.0.10

5 years ago

2.0.9

5 years ago

2.0.8

5 years ago

2.0.7

5 years ago

2.0.6

5 years ago

2.0.5

5 years ago

2.0.4

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.0.37

5 years ago

1.0.36

5 years ago

1.0.35

5 years ago

1.0.34

5 years ago

1.0.33

5 years ago

1.0.32

5 years ago

1.0.31

5 years ago

1.0.30

5 years ago

1.0.29

5 years ago

1.0.28

5 years ago

1.0.27

5 years ago

1.0.26

5 years ago

1.0.25

5 years ago

1.0.24

5 years ago

1.0.23

5 years ago

1.0.22

5 years ago

1.0.21

5 years ago

1.0.20

5 years ago

1.0.19

5 years ago

1.0.18

5 years ago

1.0.17

5 years ago

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago