βοΈ λ©μμ§, κ΅μ ν κΈμ μμ±νλ€.
μ΄λ²μλ λ΄κ° λ§λ€λ κ²μνμ λ©μμ§, κ΅μ νλ₯Ό μ μ©νλ € νλ€.
μ¬μ€ λμ κ²μνμ ν΄μΈ μ¬λμ΄ μ¬μ©ν μΌμ΄ μκΈ° λλ¬Έμ κ΅μ νλ₯Ό ν νμκ° μλ€. κ·Έλ¬λ κ³΅λΆ μ°¨μμμ μ μ©νλ €κ³ νλ€.
λ¨Ό λ©μμ§λ₯Ό μΆκ° λ±λ‘νμ.
board.main=κ²μν λ©μΈ νμ΄μ§
label.title=μ λͺ©
label.author=μμ±μ
label.content=λ΄μ©
label.imageFile=μ΄λ―Έμ§ νμΌ
label.createdDate=μμ± μκ°
label.modifiedDate=μμ μκ°
label.search=κ²μμ΄:
page.write=κ²μκΈ μμ±
page.list=κ²μκΈ λͺ©λ‘
page.modified=κ²μκΈ μμ
button.write=κ²μκΈ μμ±
button.delete=κ²μκΈ μμ
button.modified=κ²μκΈ μμ
button.list=κ²μκΈ λͺ©λ‘
button.search=κ²μ
νμ리ν λ©μμ§ μ μ©
νμ리νμ λ©μμ§ ννμ #{...}
λ₯Ό μ¬μ©νλ©΄ μ€νλ§μ λ©μμ§λ₯Ό νΈλ¦¬νκ² μ‘°νν μ μλ€.
μλ₯Ό λ€μ΄μ λ°©κΈ λ±λ‘ν 'μ λͺ©'μ΄λΌλ μ΄λ¦μ μ‘°ννλ €λ©΄ #{label.title}
μ΄λΌκ³ νλ©΄ λλ€.
λ λλ§ μ
<div th:text="#{label.title}"></div>
λ λλ§ ν
<div>μ λͺ©</div>
νμ리ν ν νλ¦Ώ νμΌμ λ©μμ§λ₯Ό μ μ©ν΄λ³΄μ.
μλλ boardWrite.htmlμ μ μ©ν κ²μ΄λ€. μ½λ μ€ λ©μμ§ ννμμ΄ μ μ©λ body λΆλΆλ§ 첨λΆνλ€.
boardWrite.html
<body>
<div class="container">
<h1 th:text="#{page.write}">κ²μκΈ μμ±</h1>
<form th:action="@{/board/write}" th:object="${post}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="title" th:text="#{label.title}">μ λͺ©</label>
<input type="text" id="title" th:field="*{title}" required onkeyup="checkInputLength()">
<span id="titleLengthMessage"></span>
</div>
<div class="form-group">
<label for="author" th:text="#{label.author}">μμ±μ</label>
<input type="text" id="author" th:field="*{author}" required onkeyup="checkInputLength()">
<span id="authorLengthMessage"></span>
</div>
<div class="form-group">
<label for="content" th:text="#{label.content}">λ΄μ©</label>
<textarea id="content" th:field="*{content}" rows="8" required></textarea>
<strong>μ΄λ―Έμ§ νμΌ<input type="file" name="file"></strong>
<li>첨λΆνμΌ κΈ°λ₯ ꡬν μ€..<input type="file" name="attachFile"></li>
</div>
<button type="submit" class="btn" id="submitButton" th:text="#{button.write}">μμ±νκΈ°</button>
</form>
</div>
</body>
<h1 th:text="#{page.write}">κ²μκΈ μμ±</h1>
<label for="title" th:text="#{label.title}">μ λͺ©</label>
<label for="title" th:text="#{label.title}">μ λͺ©</label>
<label for="content" th:text="#{label.content}">λ΄μ©</label>
<button type="submit" class="btn" id="submitButton" th:text="#{button.write}">μμ±νκΈ°</button>
μ§κΈκΉμ§ λ©μμ§λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ λ°©λ²μ μμ보μλ€. μ΄μ μ¬κΈ°μ λν΄μ κ΅μ νλ₯Ό μΉ μ ν리μΌμ΄μ μ μ΄λ»κ² μ μ©νλμ§ μμ보μ.
μ΄λ²μλ κ²μνμ κ΅μ νλ₯Ό μ μ©ν΄λ³΄μ. λ¨Όμ μμ΄ λ©μμ§λ₯Ό μΆκ°νμ.
messages_en.properties
board.main=Board Main Page
label.title=Title
label.author=Author
label.content=Content
label.imageFile=Image File
label.createdDate=Create Date
label.modifiedDate=Modified Date
label.search=Search Word:
page.write=Post Write
page.list=Post List
page.modified=Post Update
button.write=Post Write
button.delete=Post Delete
button.modified=Post Update
button.list=Post List
button.search=Search
λμ μ‘°μ‘ν μμ΄λ‘ λμΆ© μμ±ν μμ΄ λ²μ μ λ©μμ§μ΄λ€. μ¬μ€ μ΄κ²μΌλ‘ κ΅μ ν μμ
μ κ±°μ λλ¬λ€. μμμ ν
νλ¦Ώ νμΌμλ λͺ¨λ #{...}
λ₯Ό ν΅ν΄μ λ©μμ§λ₯Ό μ¬μ©νλλ‘ μ μ©ν΄λμκΈ° λλ¬Έμ΄λ€.
μΉμΌλ‘ νμΈνκΈ°
μΉ λΈλΌμ°μ μ μΈμ΄ μ€μ κ°μ λ³κ²½νλ©΄μ κ΅μ ν μ μ©μ νμΈν΄λ³΄μ.
ν¬λ‘¬ λΈλΌμ°μ -> μ€μ -> μΈμ΄λ₯Ό κ²μνκ³ , μ°μ μμλ₯Ό μμ΄κ° μ²μμ μ€λλ‘ νλ©΄ λλ€.
μΈμ΄ λ³κ²½ μ
μΈμ΄ λ³κ²½ ν
κ΅μ νκ° μ μ© λ κ²μ΄ 보μΈλ€.
μΉ λΈλΌμ°μ μ μΈμ΄ μ€μ κ°μ λ³κ²½νλ©΄ μμ²μ Accept-Language
μ κ°μ΄ λ³κ²½λλ€.
Accept-Language
λ ν΄λΌμ΄μΈνΈκ° μλ²μ κΈ°λνλ μΈμ΄ μ 보λ₯Ό λ΄μμ μμ²νλ HTTP μμ² ν€λμ΄λ€.
μ€νλ§μ κ΅μ ν λ©μμ§ μ ν
λ©μμ§ κΈ°λ₯μ Locale μ 보λ₯Ό μμμΌ μΈμ΄λ₯Ό μ νν μ μλ€.
κ²°κ΅ μ€νλ§λ Locale μ 보λ₯Ό μμμΌ μΈμ΄λ₯Ό μ νν μ μλλ°, μ€νλ§μ μΈμ΄ μ νμ κΈ°λ³ΈμΌλ‘ Accept-Language ν€λμ κ°μ μ¬μ©νλ€.
LocaleResolver
μ€νλ§μ Locale μ ν λ°©μμ λ³κ²½ν μ μλλ‘ LocaleResolver λΌλ μΈν°νμ΄μ€λ₯Ό μ 곡νλλ°, μ€νλ§ λΆνΈλ κΈ°λ³ΈμΌλ‘ Accept-Language λ₯Ό νμ©νλ AcceptHeaderLocaleResolver λ₯Ό μ¬μ©νλ€.
LocaleResolver μΈν°νμ΄μ€
public interface LocaleResolver {
Locale resolveLocale(HttpServletRequest request);
void setLocale(HttpServletRequest request, @Nullable HttpServletResponse
response, @Nullable Locale locale);
}
LocaleResolver λ³κ²½
λ§μ½ Locale μ ν λ°©μμ λ³κ²½νλ €λ©΄ LocaleResolverμ ꡬν체λ₯Ό λ³κ²½ν΄μ μΏ ν€λ μΈμ
κΈ°λ°μ Locale μ ν κΈ°λ₯μ μ¬μ©ν μ μλ€. μλ₯Ό λ€μ΄μ κ³ κ°μ΄ μ§μ Locale μ μ ννλλ‘ νλ κ²μ΄λ€.
κ΄λ ¨ν΄μ LocaleResolverλ₯Ό κ²μνλ©΄ μ λ§μ μμ κ° λμ€λ νμν λΆλ€μ μ°Έκ³ νμ.
λ μμΈν μ½λλ κΉνλΈλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ!
Github: https://github.com/pp8817/ToyProjectBoard
μΆμ²
(κ°μ)μ€νλ§ MVC 2νΈ - λ°±μλ μΉ κ°λ° νμ© κΈ°μ