{"id":21385190,"url":"https://github.com/spoqa/aeiou","last_synced_at":"2025-07-13T14:31:58.604Z","repository":{"id":25050509,"uuid":"103050466","full_name":"spoqa/aeiou","owner":"spoqa","description":"i18n scripts","archived":false,"fork":false,"pushed_at":"2023-01-12T08:27:57.000Z","size":146,"stargazers_count":25,"open_issues_count":6,"forks_count":3,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-06-04T07:05:32.183Z","etag":null,"topics":["gettext","i18n"],"latest_commit_sha":null,"homepage":"https://spoqa.github.io/2017/09/26/aeiou-tutorial.html","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spoqa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-10T18:03:49.000Z","updated_at":"2022-10-25T08:12:36.000Z","dependencies_parsed_at":"2023-01-14T02:02:50.602Z","dependency_job_id":null,"html_url":"https://github.com/spoqa/aeiou","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spoqa/aeiou","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spoqa%2Faeiou","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spoqa%2Faeiou/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spoqa%2Faeiou/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spoqa%2Faeiou/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spoqa","download_url":"https://codeload.github.com/spoqa/aeiou/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spoqa%2Faeiou/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265155788,"owners_count":23719589,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gettext","i18n"],"created_at":"2024-11-22T11:45:29.550Z","updated_at":"2025-07-13T14:31:58.355Z","avatar_url":"https://github.com/spoqa.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 아에이오우\n스포카 프론트엔드 프로젝트에서 사용하는 국제화 스크립트입니다.\n\n[아에이오우 튜토리얼](https://spoqa.github.io/2017/09/26/aeiou-tutorial.html)\n\n# 기능\n- js, ts 파일들을 읽고, 그 안에 있는 `gettext` 함수 호출식을 긁어서 `messages.pot` 파일을 생성합니다.\n- transifex로 `messages.pot`파일을 업로드합니다.\n- transifex에서 `*.po` 파일들을 다운받고, `*.mo` 파일로 컴파일합니다.\n- 추출한 `messages.pot`에는 들어있지만 다운받은 `*.po` 파일에는 들어있지 않은 번역어를 찾아줍니다.\n\n## 사용법\n```sh\nnpm install -g aeiou\n\n# 도움말을 확인합니다.\naeiou --help\n\n# 특정 명령어에 대한 도움말도 확인할 수 있습니다.\naeiou extract --help\n\n# 소스코드에서 번역이 필요한 문구들을 추출합니다.\naeiou extract --srcDir=\"./src\" --outDir=\"./tmp/translations\"\n# `./tmp/translations` 경로로 들어가보면 `messages.pot` 파일을 확인할 수 있습니다.\n\n# transifex로 업로드합니다.\n# ./tmp/translations 경로에 `messages.pot` 파일이 있어야합니다.\naeiou push \\\n    --id=\"dkdlel\" --password=\"qlalfqjsgh\" \\\n    --project=\"vmfhwprxm\" --resource=\"flthtm\" \\\n    --potDir=\"./tmp/translations\"\n\n# transifex에서 번역 작업 후 번역 파일들을 내려받습니다.\naeiou download \\\n    --id=\"dkdlel\" --password=\"qlalfqjsgh\" \\\n    --project=\"vmfhwprxm\" --resource=\"flthtm\" \\\n    --outDir=\"./tmp/translations\"\n\n# 추출한 `messages.pot` 파일과 내려받은 번역파일을 비교해서 비어있는 번역어가 없는지 검사합니다.\naeiou ensure --locale=\"ja\" --potDir=\"./src/static/translations\"\n```\n\n## aeiou 개발하기\n- `npm install`(`yarn`)\n- `npm run build`(`yarn build`) or `npm run dev`(`yarn dev`)\n- `.js` 파일은 컴파일된 결과입니다. 손으로 고치지 맙시다.\n    - vscode의 경우 좌측 파일트리의 `.js` 파일들이 신경쓰이면\n        - 상단 메뉴에서 `Code` \u003e `기본 설정` \u003e `설정`으로 들어갑니다.\n        - 우측 상단 드랍다운에서 `작업 영역 설정`을 클릭합니다.\n        - 다음의 내용을 설정에 추가합니다:\n            ```\n            \"files.exclude\": {\n                \"**/*.js\": true\n            }\n            ```\n\n### lockfile 업데이트\n\nnpm을 사용한 경우 `yarn import`를 써서 `yarn.lock`을 업데이트합니다.\n\nyarn을 사용한 경우 다음 방법으로 `package-lock.json`을 업데이트합니다.\n\n```sh\nrm package-lock.json\nnpm shrinkwrap\nmv npm-shrinkwrap.json package-lock.json\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspoqa%2Faeiou","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspoqa%2Faeiou","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspoqa%2Faeiou/lists"}