{"_id":"gs-i18n","_rev":"6-1e6bc6caf28cf5862308026cf491153f","name":"gs-i18n","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"gs-i18n","version":"1.0.0","keywords":[],"author":"","license":"ISC","_id":"gs-i18n@1.0.0","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"bin":{"gs-i18n":"dist/cli.js"},"dist":{"shasum":"e8722c967249edde6421853e55b011026e99fdac","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.0.tgz","fileCount":53,"integrity":"sha512-Yrf8e4B8T6uLDd0xO13iWI0pyskN/gb5jUgjj6Ayl0S/UZyMcHB+5StDYstYmhc/0RKUU583vE1xgOK9keB8Fg==","signatures":[{"sig":"MEYCIQCundNvcua28VfERd9jBE1c3Kwo1X25Wxl+1RyLswmZQwIhAKu62qaKpZbkL4SsSryUVR9sqMEN6iEYe/9LrAbgaz8p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3926420},"main":"index.js","private":false,"scripts":{"test":"pnpm run test-scan && ts-node src/download.ts","build":"tsup src/cli.ts --format cjs,esm --dts --out-dir dist","dev-cli":"ts-node src/cli.ts","test-scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs","publish-package":"pnpm run build && changeset version && changeset publish"},"_npmUser":{"name":"jgjgill","email":"dbdltm22@naver.com"},"_npmVersion":"10.7.0","directories":{},"_nodeVersion":"20.14.0","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c","devDependencies":{"tsup":"^8.4.0","dotenv":"^16.5.0","ts-node":"^10.9.2","@fxts/core":"^1.10.0","picocolors":"^1.1.1","typescript":"^5.8.3","@types/node":"^22.15.3","@clack/prompts":"^0.10.1","i18next-scanner":"^4.6.0","google-spreadsheet":"^4.1.4","google-auth-library":"^9.15.1"},"_npmOperationalInternal":{"tmp":"tmp/gs-i18n_1.0.0_1746954391674_0.8211389077317277","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"gs-i18n","version":"1.0.1","keywords":[],"author":"","license":"ISC","_id":"gs-i18n@1.0.1","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"bin":{"gs-i18n":"dist/index.js"},"dist":{"shasum":"f29a936b838f96cf3a17d8f1b688e33bdfc38d4d","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.1.tgz","fileCount":5,"integrity":"sha512-vEUdxcE0yGATpkA4XAD8+/ZkC2HCUwjFKE/iQh3uWjG543i8CAWj0ZPptE+V/hod2ksXQk26XSsQlBH6Mzf3KQ==","signatures":[{"sig":"MEUCIEv/bIu5IUzmL6D1Ad5aqo33mhdeTsih816kB5zp+0bSAiEA+q6huWBegNSydeKe09alCzpHrzKIi0+5Ku3URPrr4gE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3230816},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"test":"pnpm run test-scan && ts-node src/download.ts","build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist","dev-cli":"ts-node src/cli.ts","test-scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs","publish-package":"pnpm run build && changeset version && changeset publish"},"_npmUser":{"name":"jgjgill","email":"dbdltm22@naver.com"},"_npmVersion":"10.7.0","directories":{},"_nodeVersion":"20.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c","devDependencies":{"tsup":"^8.4.0","dotenv":"^16.5.0","ts-node":"^10.9.2","@fxts/core":"^1.10.0","picocolors":"^1.1.1","typescript":"^5.8.3","@types/node":"^22.15.3","@clack/prompts":"^0.10.1","i18next-scanner":"^4.6.0","google-spreadsheet":"^4.1.4","google-auth-library":"^9.15.1"},"_npmOperationalInternal":{"tmp":"tmp/gs-i18n_1.0.1_1746955338243_0.8300628453888732","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"gs-i18n","version":"1.0.2","keywords":["cli","google-sheets","i18n"],"author":{"url":"https://github.com/jgjgill","name":"jgjgill","email":"dbdltm22@naver.com"},"license":"ISC","_id":"gs-i18n@1.0.2","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"homepage":"https://jgjgill.github.io/gs-i18n/","bugs":{"url":"https://github.com/jgjgill/gs-i18n/issues"},"bin":{"gs-i18n":"dist/index.js"},"dist":{"shasum":"22fd6c4f9390e7ea648db33fe0c2733d2845485c","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.2.tgz","fileCount":6,"integrity":"sha512-z4e7vZvhkp1DHikkKpbYbGnjYYQTmdwSO4Vz+BrmLd1GUFCddXsjH4+oFt/N+Hl0arWKp7CBDIRvm1rjklDzAQ==","signatures":[{"sig":"MEUCIQDXHJioe11JrpRBjvrj/Avu19rS9OomMtmjkVMS/lfnOAIgH76Z1EhfsOdKcQOQw6dsJ84lwkGNXGVZ8y9RqTFcpnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3244000},"main":"./dist/index.js","_from":"file:gs-i18n-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"lint":"biome check --write .","test":"pnpm run test-scan && ts-node src/download.ts","build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist","dev-cli":"ts-node src/index.ts","docs:dev":"vitepress dev docs","test-scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","publish-package":"pnpm run build && changeset version && changeset publish"},"_npmUser":{"name":"jgjgill","email":"dbdltm22@naver.com"},"_resolved":"/private/var/folders/4k/1l5d5xt13g91wds2m82y5wcw0000gn/T/9869c4e0fe4deaab030576883651ef0a/gs-i18n-1.0.2.tgz","_integrity":"sha512-z4e7vZvhkp1DHikkKpbYbGnjYYQTmdwSO4Vz+BrmLd1GUFCddXsjH4+oFt/N+Hl0arWKp7CBDIRvm1rjklDzAQ==","repository":{"url":"git+https://github.com/jgjgill/gs-i18n.git","type":"git"},"_npmVersion":"10.9.2","description":"Google Sheets와 i18next를 연동한 다국어 관리 CLI 도구","directories":{},"_nodeVersion":"22.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","dotenv":"^16.5.0","ts-node":"^10.9.2","vitepress":"^1.6.3","@fxts/core":"^1.10.0","picocolors":"^1.1.1","typescript":"^5.8.3","@types/node":"^22.15.17","@biomejs/biome":"1.9.4","@clack/prompts":"^0.10.1","@changesets/cli":"^2.29.4","i18next-scanner":"^4.6.0","google-spreadsheet":"^4.1.4","google-auth-library":"^9.15.1"},"_npmOperationalInternal":{"tmp":"tmp/gs-i18n_1.0.2_1747133130356_0.3357874377495649","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"gs-i18n","version":"1.0.3","keywords":["cli","google-sheets","i18n"],"author":{"url":"https://github.com/jgjgill","name":"jgjgill","email":"dbdltm22@naver.com"},"license":"ISC","_id":"gs-i18n@1.0.3","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"homepage":"https://jgjgill.github.io/gs-i18n/","bugs":{"url":"https://github.com/jgjgill/gs-i18n/issues"},"bin":{"gs-i18n":"dist/index.js"},"dist":{"shasum":"b74f4672898c8143c5d6cdd4d2ee346f381c4ead","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.3.tgz","fileCount":6,"integrity":"sha512-6eB9pm4rN6NPpRFFVKvpNt7Qbi/WC3gqtAcYemWT+TqPg0VGpKI19KXLG0tN47IUGTRovISSVNecw3H7T5b3IQ==","signatures":[{"sig":"MEYCIQC9SaY6LyafdbGDmvVCAO9rGMbNDyHdQwjppgy2KqZutQIhAP+NcQCuu2CEyArT+QGvhIAOlWDNZRoJk8nhfvzuC+wA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3244205},"main":"./dist/index.js","_from":"file:gs-i18n-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"lint":"biome check --write .","test":"pnpm run test-scan && ts-node src/download.ts","build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist","dev-cli":"ts-node src/index.ts","docs:dev":"vitepress dev docs","test-scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","publish-package":"pnpm run build && changeset version && changeset publish"},"_npmUser":{"name":"jgjgill","email":"dbdltm22@naver.com"},"_resolved":"/private/var/folders/4k/1l5d5xt13g91wds2m82y5wcw0000gn/T/97c65dda08cce514517fb856def639fd/gs-i18n-1.0.3.tgz","_integrity":"sha512-6eB9pm4rN6NPpRFFVKvpNt7Qbi/WC3gqtAcYemWT+TqPg0VGpKI19KXLG0tN47IUGTRovISSVNecw3H7T5b3IQ==","repository":{"url":"git+https://github.com/jgjgill/gs-i18n.git","type":"git"},"_npmVersion":"10.9.2","description":"Google Sheets와 i18next를 연동한 다국어 관리 CLI 도구","directories":{},"_nodeVersion":"22.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","dotenv":"^16.5.0","ts-node":"^10.9.2","vitepress":"^1.6.3","@fxts/core":"^1.10.0","picocolors":"^1.1.1","typescript":"^5.8.3","@types/node":"^22.15.17","@biomejs/biome":"1.9.4","@clack/prompts":"^0.10.1","@changesets/cli":"^2.29.4","i18next-scanner":"^4.6.0","google-spreadsheet":"^4.1.4","google-auth-library":"^9.15.1"},"_npmOperationalInternal":{"tmp":"tmp/gs-i18n_1.0.3_1747133506720_0.9824646150534162","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"gs-i18n","version":"1.0.4","keywords":["cli","google-sheets","i18n"],"author":{"url":"https://github.com/jgjgill","name":"jgjgill","email":"dbdltm22@naver.com"},"license":"ISC","_id":"gs-i18n@1.0.4","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"homepage":"https://jgjgill.github.io/gs-i18n/","bugs":{"url":"https://github.com/jgjgill/gs-i18n/issues"},"bin":{"gs-i18n":"dist/index.js"},"dist":{"shasum":"f0e20145059754f67d30a3561fcd5f504c98cdbb","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.4.tgz","fileCount":6,"integrity":"sha512-nriwQlng5RR5d/ncxsWj8PW73lbDs/fHcdas9pSs5NqQDXG4/9MXmMsRFLdTsK1ttdzqn5tnJ+l6D/T42nSuKw==","signatures":[{"sig":"MEQCIHKIujb3qwzDezdT37+lIBZvbtuw97W1cmWbN/wZ1+HaAiB6zqTpMGCPf2CfJ52pZPlXXiIOU0pOE0Un6TUMMMZo9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56865},"main":"./dist/index.js","_from":"file:gs-i18n-1.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"lint":"biome check --write .","test":"vitest","build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist","dev:cli":"ts-node src/index.ts","docs:dev":"vitepress dev docs","test:scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","test:coverage":"vitest run --coverage","build:schema-ts":"json2ts --input ./gs-i18n-schema.json --output ./src/__generated__/schema.ts","publish:package":"pnpm run build && changeset version && changeset publish"},"_npmUser":{"name":"jgjgill","actor":{"name":"jgjgill","type":"user","email":"dbdltm22@naver.com"},"email":"dbdltm22@naver.com"},"_resolved":"/private/var/folders/k_/smt_nkzx2gl296l2c6l0k8xc0000gn/T/53cfc7a1282e57676544a6c96b046906/gs-i18n-1.0.4.tgz","_integrity":"sha512-nriwQlng5RR5d/ncxsWj8PW73lbDs/fHcdas9pSs5NqQDXG4/9MXmMsRFLdTsK1ttdzqn5tnJ+l6D/T42nSuKw==","repository":{"url":"git+https://github.com/jgjgill/gs-i18n.git","type":"git"},"_npmVersion":"10.7.0","description":"Google Sheets와 i18next를 연동한 다국어 관리 CLI 도구","directories":{},"_nodeVersion":"20.14.0","dependencies":{"ajv":"^8.17.1","dotenv":"^16.5.0","@fxts/core":"^1.10.0","picocolors":"^1.1.1","@clack/prompts":"^0.10.1","google-spreadsheet":"^4.1.4","google-auth-library":"^9.15.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.1.3","ts-node":"^10.9.2","vitepress":"^1.6.3","typescript":"^5.8.3","@types/node":"^22.15.17","@biomejs/biome":"1.9.4","@changesets/cli":"^2.29.4","i18next-scanner":"^4.6.0","json-schema-to-typescript":"^15.0.4"},"_npmOperationalInternal":{"tmp":"tmp/gs-i18n_1.0.4_1750505939584_0.547164303455324","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"gs-i18n","version":"1.0.5","private":false,"description":"Google Sheets와 i18next를 연동한 다국어 관리 CLI 도구","keywords":["cli","google-sheets","i18n"],"homepage":"https://jgjgill.github.io/gs-i18n/","bugs":{"url":"https://github.com/jgjgill/gs-i18n/issues"},"repository":{"type":"git","url":"git+https://github.com/jgjgill/gs-i18n.git"},"license":"ISC","author":{"name":"jgjgill","email":"dbdltm22@naver.com","url":"https://github.com/jgjgill"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","bin":{"gs-i18n":"dist/index.js"},"dependencies":{"@clack/prompts":"^0.10.1","@fxts/core":"^1.10.0","ajv":"^8.17.1","dotenv":"^16.5.0","google-auth-library":"^9.15.1","google-spreadsheet":"^4.1.4","picocolors":"^1.1.1"},"devDependencies":{"@biomejs/biome":"1.9.4","@changesets/cli":"^2.29.4","@types/node":"^22.15.17","i18next-scanner":"^4.6.0","json-schema-to-typescript":"^15.0.4","ts-node":"^10.9.2","tsup":"^8.4.0","typescript":"^5.8.3","vitepress":"^1.6.3","vitest":"^3.1.3"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist","build:schema-ts":"json2ts --input ./gs-i18n-schema.json --output ./src/__generated__/schema.ts","dev:cli":"ts-node src/index.ts","docs:build":"vitepress build docs","docs:dev":"vitepress dev docs","docs:preview":"vitepress preview docs","lint":"biome check --write .","publish:package":"pnpm run build && changeset version && changeset publish","test":"vitest","test:coverage":"vitest run --coverage","test:scan":"ts-node --compiler-options '{\"module\":\"CommonJS\"}' node_modules/i18next-scanner/bin/cli.js --config i18next-scanner.config.cjs"},"_id":"gs-i18n@1.0.5","_integrity":"sha512-eI0m45xnrsAk2AVo3gE1f4KuF5V9vaU/neeZQUWwSDypai2n2dtR4S0EmJWSKoOINSuoPL1sKbGZHUTFg9IJWw==","_resolved":"/private/var/folders/k_/smt_nkzx2gl296l2c6l0k8xc0000gn/T/ae3272aa41b93a4a4c10499c07943256/gs-i18n-1.0.5.tgz","_from":"file:gs-i18n-1.0.5.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-eI0m45xnrsAk2AVo3gE1f4KuF5V9vaU/neeZQUWwSDypai2n2dtR4S0EmJWSKoOINSuoPL1sKbGZHUTFg9IJWw==","shasum":"534c8a084910e0d5803dc8c90f483fba6b221f01","tarball":"https://registry.npmjs.org/gs-i18n/-/gs-i18n-1.0.5.tgz","fileCount":6,"unpackedSize":56709,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD5Ah9H7WoKUiwUnKCn01o99y3d5e/k+cuYxcbdTrLyXQIgYfNubZdARPmTzAxmP5/LjeCY2gDZI837mu1MMpG2xFc="}]},"_npmUser":{"name":"jgjgill","email":"dbdltm22@naver.com"},"directories":{},"maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gs-i18n_1.0.5_1764588002405_0.1987282310602525"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-11T09:06:31.673Z","modified":"2025-12-01T11:20:02.789Z","1.0.0":"2025-05-11T09:06:31.896Z","1.0.1":"2025-05-11T09:22:18.498Z","1.0.2":"2025-05-13T10:45:30.566Z","1.0.3":"2025-05-13T10:51:46.920Z","1.0.4":"2025-06-21T11:38:59.760Z","1.0.5":"2025-12-01T11:20:02.601Z"},"bugs":{"url":"https://github.com/jgjgill/gs-i18n/issues"},"author":{"name":"jgjgill","email":"dbdltm22@naver.com","url":"https://github.com/jgjgill"},"license":"ISC","homepage":"https://jgjgill.github.io/gs-i18n/","keywords":["cli","google-sheets","i18n"],"repository":{"type":"git","url":"git+https://github.com/jgjgill/gs-i18n.git"},"description":"Google Sheets와 i18next를 연동한 다국어 관리 CLI 도구","maintainers":[{"name":"jgjgill","email":"dbdltm22@naver.com"}],"readme":"# gs-i18n\n\n> Google Sheets와 i18next를 활용한 다국어 관리 CLI 도구\n\n**gs-i18n**은 Google Spreadsheet를 활용하여 다국어 번역을 효율적으로 관리할 수 있는 CLI 도구에요. 개발자와 번역가가 하나의 중앙화된 플랫폼에서 협업할 수 있도록 설계되었어요.\n\n## 특징\n\n- 🔄 **양방향 동기화**: 코드 ↔ Google Sheets 간 번역 데이터 자동 동기화\n- 📊 **중앙 집중식 관리**: Google Sheets를 통한 다국어 번역 중앙 관리\n- 🚀 **간편한 사용법**: 인터랙티브 CLI를 통한 직관적인 작업 플로우\n- 🛠 **TypeScript 지원**: 타입 안전성이 보장된 개발 환경\n- 🌍 **다국어 지원**: 한국어, 영어, 일본어, 중국어 등 다양한 언어 지원\n\n## 빠른 시작\n\n```bash\n# 프로젝트에서 바로 실행\nnpx gs-i18n\n\n# 또는 전역 설치\nnpm install -g gs-i18n\ngs-i18n\n```\n\n## 준비사항\n\n### 1. Google Cloud Project 설정\n\n1. [Google Cloud Console](https://console.cloud.google.com)에서 프로젝트 생성\n2. Google Sheets API 활성화\n3. 서비스 계정 생성 및 JSON 키 다운로드\n\n### 2. `gs-i18n.json` 설정\n\n프로젝트 루트에 `gs-i18n.json` 파일을 생성하고 다음 내용을 설정\n\n```json\n{\n  \"$schema\": \"https://raw.githubusercontent.com/jgjgill/gs-i18n/main/src/gs-i18n-schema.json\",\n  \"spreadsheet\": {\n    \"docId\": \"YOUR_SPREADSHEET_ID\",\n    \"sheetId\": 0\n  },\n  \"googleServiceAccount\": {\n    \"email\": \"YOUR_SERVICE_ACCOUNT_EMAIL@project.iam.gserviceaccount.com\",\n    \"privateKey\": \"-----BEGIN PRIVATE KEY-----\\nYOUR_PRIVATE_KEY_HERE\\n-----END PRIVATE KEY-----\\n\"\n  }\n}\n```\n\n### 3. Google Spreadsheet 권한 설정\n\n1. 생성한 Google Spreadsheet에 서비스 계정 이메일 공유\n2. 편집 권한 부여\n\n## 사용법\n\n### 초기 설정\n\n```bash\n# 프로젝트 초기화\nnpx gs-i18n\n```\n\n실행하면 다음과 같은 메뉴가 표시되어요.\n\n```\nGoogle 스프레드시트 관리 도구\n\n? 원하는 작업을 선택하세요\n❯ 스프레드시트 정보 조회하기\n  i18next-scanner 파일 생성하기\n  다국어 관련 기본 파일 구성하기\n  다국어 코드 시트에 반영하기\n  시트 번역 내용 코드에 반영하기\n  종료\n```\n\n### 워크플로우\n\n#### 1. 초기 설정\n\n```bash\n# i18next-scanner 설정 파일 생성\nnpx gs-i18n\n→ \"i18next-scanner 파일 생성하기\" 선택\n\n# 다국어 파일 구조 생성\nnpx gs-i18n\n→ \"다국어 관련 기본 파일 구성하기\" 선택\n```\n\n#### 2. 번역 관리 주기\n\n```bash\n# 1. 코드의 번역 키를 스프레드시트에 업로드\nnpx gs-i18n\n→ \"다국어 코드 시트에 반영하기\" 선택\n\n# 2. 번역가가 스프레드시트에서 번역 작업\n\n# 3. 번역된 내용을 코드에 다운로드\nnpx gs-i18n\n→ \"시트 번역 내용 코드에 반영하기\" 선택\n```\n\n## 기능 상세\n\n### 스프레드시트 정보 조회하기\n\n연결된 Google Spreadsheet의 기본 정보를 확인해요.\n\n```\n스프레드시트 제목: My i18n Project\n시트 수: 1\n\n시트 목록\n1. 번역 시트 (ID: 0)\n```\n\n### i18next-scanner 파일 생성하기\n\n프로젝트에 맞는 i18next-scanner 설정 파일을 인터랙티브하게 생성해요.\n\n- 지원 언어 선택 (다중 선택 가능)\n- 기본 언어 설정\n- 파일 경로 자동 설정\n\n### 다국어 관련 기본 파일 구성하기\n\n코드에서 사용된 번역 키를 스캔하여 기본 번역 파일 구조를 생성해요.\n\n```\npublic/\n  └── locales/\n      ├── ko-KR/\n      │   └── common.json\n      ├── en-US/\n      │   └── common.json\n      └── ja-JP/\n          └── common.json\n```\n\n### 다국어 코드 시트에 반영하기 (Upload)\n\n로컬 JSON 파일의 번역 키를 Google Sheets에 업로드해요.\n\n- 새로운 키 자동 추가\n- 기존 키는 유지\n- 언어별 번역 값 동기화\n\n### 시트 번역 내용 코드에 반영하기 (Download)\n\nGoogle Sheets의 번역 내용을 로컬 JSON 파일에 다운로드해요.\n\n- 번역된 내용 자동 반영\n- 파일 포맷 자동 정리\n\n## Google Sheets 구조\n\n| 키          | 한국어      | 영어      | 일본어     |\n| ----------- | ----------- | --------- | ---------- |\n| 환영합니다  | 환영합니다  | Welcome   | ようこそ   |\n| 로그아웃    | 로그아웃    | Logout    | ログアウト |\n| 사용자 이름 | 사용자 이름 | User Name | ユーザー名 |\n\n## 설정 예시\n\n### i18next-scanner.config.cjs\n\n```javascript\nmodule.exports = {\n  input: [\"./src/**/*.{ts,tsx}\", \"!**/node_modules/**\"],\n  options: {\n    defaultLng: \"ko-KR\",\n    lngs: [\"ko-KR\", \"en-US\", \"ja-JP\"],\n    ns: [\"common\"],\n    resource: {\n      loadPath: \"./public/locales/{{lng}}/common.json\",\n      savePath: \"./public/locales/{{lng}}/common.json\",\n    },\n    // ... 기타 설정\n  },\n};\n```\n\n### JSON 번역 파일 구조\n\n```json\n{\n  \"환영합니다\": \"환영합니다\",\n  \"로그아웃\": \"로그아웃\",\n  \"사용자 이름\": \"사용자 이름\"\n}\n```\n\n## 프로젝트 구조\n\n```\nproject/\n├── gs-i18n.json                  # google-sheets 정보 설정\n├── i18next-scanner.config.cjs    # scanner 설정\n├── package.json\n├── public/\n│   └── locales/                 # 번역 파일\n│       ├── ko-KR/\n│       │   └── common.json\n│       ├── en-US/\n│       │   └── common.json\n│       └── ja-JP/\n│           └── common.json\n└── src/\n    └── components/              # React 컴포넌트\n```\n\n## 자주 묻는 질문\n\n**Q: 스프레드시트를 찾을 수 없다는 오류가 발생해요.**\nA: 서비스 계정에 스프레드시트 편집 권한이 있는지 확인해 주세요.\n\n**Q: 변수가 인식되지 않아요.**\nA: `gs-i18n.json` 파일이 프로젝트 루트에 있는지, 올바른 형식인지 확인해 주세요.\n\n### 이슈 보고\n\n버그를 발견하거나 기능 제안이 있으시면 [이슈](https://github.com/jgjgill/gs-i18n/issues/new)를 생성해 주세요.\n\n## 지원\n\n- GitHub: [@jgjgill](https://github.com/jgjgill)\n- 이메일: dbdltm22@naver.com\n\n---\n\nMade with ❤️ by [jgjgill](https://github.com/jgjgill)\n","readmeFilename":"README.md"}