{"componentChunkName":"component---src-templates-blog-post-js","path":"/vue/vue-js-소프트웨어국제화-i18n/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"1d4c5c11-729f-56f2-a99d-4c94d7ca5ee4","excerpt":"Vue Js 소프트웨어국제화(i18n) 단순히 번역 원고를 받아 글자 바꾸는 것보다 신경 써야 할 부분이 많다. 그 부분들을 통틀어 국제화(Internationalization; i18n) 라고 한다. i18n은 어떤 프레임워크가 아니고 i와 n 사이에 1…","html":"<p><img src=\"/assets/vue-logo.png\" alt=\"Vue Js 소프트웨어국제화(i18n)\" title=\"Vue Js 소프트웨어국제화(i18n)\"></p>\n<p>단순히 번역 원고를 받아 글자 바꾸는 것보다 신경 써야 할 부분이 많다. 그 부분들을 통틀어 국제화(Internationalization; i18n) 라고 한다.</p>\n<blockquote>\n<p>i18n은 어떤 프레임워크가 아니고 i와 n 사이에 18개의 알파벳이라는 뜻이다.</p>\n</blockquote>\n<h2 id=\"글자-번역-외에-국제화에-필요한-작업\" style=\"position:relative;\"><a href=\"#%EA%B8%80%EC%9E%90-%EB%B2%88%EC%97%AD-%EC%99%B8%EC%97%90-%EA%B5%AD%EC%A0%9C%ED%99%94%EC%97%90-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9E%91%EC%97%85\" aria-label=\"글자 번역 외에 국제화에 필요한 작업 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>글자 번역 외에 국제화에 필요한 작업</h2>\n<ul>\n<li>언어, 지역 별 번역</li>\n<li>OS/플랫폼 인코딩</li>\n<li>문자열 치환 방법</li>\n<li>국제화 UI (문자열 크기 변화, 폰트, 아이콘 등)</li>\n<li>쓰기 방향의 차이 (LTR, RTL)</li>\n<li>숫자, 공백, 화폐, 날짜, 주소, 측정 단위 등 표기</li>\n<li>타임존, 썸머타임 등 시각</li>\n<li>문자열 정렬 방법</li>\n</ul>\n<p>vue-i18n 을 활용하여 날짜, 화폐, 문자열만 우선 다뤄 보도록 하겠다.</p>\n<h2 id=\"vue-i18n\" style=\"position:relative;\"><a href=\"#vue-i18n\" aria-label=\"vue i18n permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue i18n</h2>\n<p>vue-i18n 라이브러리를 활용하여 3개국어를 지원하는 예시를 만들어 vue-i18n 이 어떻게 동작되는지 살펴 보도록 한다.</p>\n<h3 id=\"install\" style=\"position:relative;\"><a href=\"#install\" aria-label=\"install permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Install</h3>\n<div class=\"gatsby-highlight\" data-language=\"npm\"><pre class=\"language-npm\"><code class=\"language-npm\">npm install vue-i18n</code></pre></div>\n<h3 id=\"demo\" style=\"position:relative;\"><a href=\"#demo\" aria-label=\"demo permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Demo</h3>\n<p><strong>i18n.js</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Vue <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue\"</span>\n<span class=\"token keyword\">import</span> VueI18n <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue-i18n\"</span>\n\nVue<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span>VueI18n<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">loadLocaleMessages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> locales <span class=\"token operator\">=</span> require<span class=\"token punctuation\">.</span><span class=\"token function\">context</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">\"./locales/message\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">[A-Za-z0-9-_,\\s]+\\.json$</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">const</span> messages <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  locales<span class=\"token punctuation\">.</span><span class=\"token function\">keys</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">key</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> matched <span class=\"token operator\">=</span> key<span class=\"token punctuation\">.</span><span class=\"token function\">match</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">([A-Za-z0-9-_]+)\\.</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>matched <span class=\"token operator\">&amp;&amp;</span> matched<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> locale <span class=\"token operator\">=</span> matched<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n      messages<span class=\"token punctuation\">[</span>locale<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">locales</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">loadLocalDateTimeFormats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token keyword\">return</span> messages\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">loadLocalDateTimeFormats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> locales <span class=\"token operator\">=</span> require<span class=\"token punctuation\">.</span><span class=\"token function\">context</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">\"./locales/date\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">[A-Za-z0-9-_,\\s]+\\.json$</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">const</span> messages <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  locales<span class=\"token punctuation\">.</span><span class=\"token function\">keys</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">key</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> matched <span class=\"token operator\">=</span> key<span class=\"token punctuation\">.</span><span class=\"token function\">match</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">([A-Za-z0-9-_]+)\\.</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>matched <span class=\"token operator\">&amp;&amp;</span> matched<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> locale <span class=\"token operator\">=</span> matched<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n      messages<span class=\"token punctuation\">[</span>locale<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">locales</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token keyword\">return</span> messages\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">loadLocalNumberFormats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> locales <span class=\"token operator\">=</span> require<span class=\"token punctuation\">.</span><span class=\"token function\">context</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">\"./locales/number\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">[A-Za-z0-9-_,\\s]+\\.json$</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">const</span> messages <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  locales<span class=\"token punctuation\">.</span><span class=\"token function\">keys</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">key</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> matched <span class=\"token operator\">=</span> key<span class=\"token punctuation\">.</span><span class=\"token function\">match</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">([A-Za-z0-9-_]+)\\.</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">i</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>matched <span class=\"token operator\">&amp;&amp;</span> matched<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> locale <span class=\"token operator\">=</span> matched<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n      messages<span class=\"token punctuation\">[</span>locale<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">locales</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token keyword\">return</span> messages\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">VueI18n</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">locale</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">VUE_APP_I18N_LOCALE</span> <span class=\"token operator\">||</span> <span class=\"token string\">\"ko\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">fallbackLocale</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">VUE_APP_I18N_FALLBACK_LOCALE</span> <span class=\"token operator\">||</span> <span class=\"token string\">\"ko\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">messages</span><span class=\"token operator\">:</span> <span class=\"token function\">loadLocaleMessages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">dateTimeFormats</span><span class=\"token operator\">:</span> <span class=\"token function\">loadLocalDateTimeFormats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">numberFormats</span><span class=\"token operator\">:</span> <span class=\"token function\">loadLocalNumberFormats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>main.js</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> i18n <span class=\"token keyword\">from</span> <span class=\"token string\">\"./i18n\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span> code\n\n<span class=\"token keyword\">new</span> <span class=\"token class-name\">Vue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  i18n\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span> code\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">$mount</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#app\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>View/I18n.vue</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>i18n<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>select</span> <span class=\"token attr-name\">v-model</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>$i18n.locale<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@change</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>onLocaleChange($event)<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>option</span> <span class=\"token attr-name\">v-for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>lang in langs<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">:value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>lang.code<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">:key</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>lang.code<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        {{ lang.label }}\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>option</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>select</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>Message localization<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>title : {{ $t(\"title\") }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>title : {{ $t(\"hello\", { name: \"Your name\" }) }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>DateTime localization<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>origin : {{ sample.date }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>short : {{ $d(sample.date, \"short\") }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>long : {{ $d(sample.date, \"long\") }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>Number localization<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>origin : {{ sample.number }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>currency : {{ $n(sample.number, \"currency\") }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">\"I18n\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">components</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">data</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token literal-property property\">sample</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token literal-property property\">date</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n          <span class=\"token literal-property property\">number</span><span class=\"token operator\">:</span> <span class=\"token number\">10000</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token literal-property property\">langs</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n          <span class=\"token punctuation\">{</span>\n            <span class=\"token literal-property property\">code</span><span class=\"token operator\">:</span> <span class=\"token string\">\"en\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">\"English\"</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">{</span>\n            <span class=\"token literal-property property\">code</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ko\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">\"한국어\"</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">methods</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">onLocaleChange</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>$i18n<span class=\"token punctuation\">.</span>locale <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>value\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span> <span class=\"token attr-name\">scoped</span><span class=\"token punctuation\">></span></span><span class=\"token style\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h4 id=\"datetime-localization\" style=\"position:relative;\"><a href=\"#datetime-localization\" aria-label=\"datetime localization permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DateTime localization</h4>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token comment\">// locales/date/en.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"short\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"year\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"month\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"short\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"day\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"long\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"year\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"month\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"long\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"day\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"weekday\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"long\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"hour\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"minute\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// locales/date/ko.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"short\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"year\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"month\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"short\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"day\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"long\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"year\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"month\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"long\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"day\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"weekday\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"long\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"hour\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"minute\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"numeric\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"hour12\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4 id=\"number-localization\" style=\"position:relative;\"><a href=\"#number-localization\" aria-label=\"number localization permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Number localization</h4>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token comment\">// locales/number/en.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"currency\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"style\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"currency\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"currency\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"USD\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// locales/number/ko.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"currency\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"style\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"currency\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"currency\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"KRW\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4 id=\"message-localization\" style=\"position:relative;\"><a href=\"#message-localization\" aria-label=\"message localization permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Message localization</h4>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token comment\">// locales/message/en.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"title\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"hello\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"hello {name}\"</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// locales/message/ko.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"제목\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"hello\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"안녕 {name}\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","tableOfContents":"<ul>\n<li><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#%EA%B8%80%EC%9E%90-%EB%B2%88%EC%97%AD-%EC%99%B8%EC%97%90-%EA%B5%AD%EC%A0%9C%ED%99%94%EC%97%90-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9E%91%EC%97%85\">글자 번역 외에 국제화에 필요한 작업</a></li>\n<li>\n<p><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#vue-i18n\">Vue i18n</a></p>\n<ul>\n<li><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#install\">Install</a></li>\n<li>\n<p><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#demo\">Demo</a></p>\n<ul>\n<li><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#datetime-localization\">DateTime localization</a></li>\n<li><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#number-localization\">Number localization</a></li>\n<li><a href=\"/vue/vue-js-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B5%AD%EC%A0%9C%ED%99%94-i18n/#message-localization\">Message localization</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>","wordCount":{"words":117},"fields":{"slug":"/vue/vue-js-소프트웨어국제화-i18n/","image":"/assets/vue-logo.png","faq":[]},"frontmatter":{"title":"Vue Js 소프트웨어국제화(i18n)","date":"2021년 5월 2일","dateISO":"2021-05-02T16:11:34.709Z","updatedISO":null,"category":"vue","description":"라우트에 연결하거나 탐색을 수행 할 때 이름이 있는 라우트를 사용할수 있다. 사용 법은 routes 에 name 옵션을 지정 하면 된다. 라우트 관리가 편리 하다 라는 장점이 있다.","tags":["vue","javascript","framework","frontend","web","file","FormData","FileReader"]}}},"pageContext":{"slug":"/vue/vue-js-소프트웨어국제화-i18n/","previous":{"fields":{"slug":"/vue/vue-js-파일업로드/"},"frontmatter":{"title":"Vue Js 뷰 파일업로드","tags":["vue","javascript","framework","frontend","web","file","FormData","FileReader"]}},"next":{"fields":{"slug":"/android/android-room/"},"frontmatter":{"title":"Android ROOM","tags":["android","kotlin","framework","room"]}}}},"staticQueryHashes":["213619243","3262363727"]}