Spring Boot 翻译从数据库检索的数据

e3bfsja2  于 2023-01-20  发布在  Spring
关注(0)|答案(1)|浏览(130)

目前我正在建立一个多语言页面,页面上的一些数据是从数据库中检索的。我使用i18n来翻译静态内容,但我不知道如何翻译提到的数据。
前端

<div th:each="map : ${listTypeMap}">
     <div th:each="mapEntry : ${map}" th:if="${mapEntry.value} == 'foo'">
          <div class="col-md-12 form-check">
             <input type="checkbox" class="form-check-input" th:value="${mapEntry.key}" required>
             <label class="form-check-label" for="validationFormCheck1" th:text="${mapEntry.key}"></label>
             //I want to translate this label
          </div>
     </div>
</div>

我有一个天真的想法,这是获得当前的网页区域设置和翻译它在Spring,但我认为有更好的方法。
SearchFooServiceImpl.java

@Service
@Slf4j
public class SearchFooServiceImpl implements SearchFooService{
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public HashMap<String,String> searchFoo() {
        HashMap<String,String> results = new HashMap<>();
        jdbcTemplate.query("SELECT FOO_NAME_ENG, FOO_CLASS_DESC_ENG FROM FOO_TYPE ", (ResultSet rs) -> {
            Locale locale = LocaleContextHolder.getLocale();
            //if locale.getLanguage() is zh, translate English to Chinese
            while (rs.next()) {
                results.put(rs.getString("FOO_NAME_ENG"), rs.getString("FOO_CLASS_DESC_ENG"));
            }
            return results;
        });
        return results;
    }
    
}
4urapxun

4urapxun1#

我找到了使用thymeleaf预处理器的解决方案。例如,我从数据库中得到的数据像“Hello World”,然后我用下面的代码将其转换为“hello.world

th:text="#{__${#strings.replace(mapEntry.key,' ','.').toLowerCase()}__}"

然后我就可以把它翻译成i18n中的普通文本。
消息_中文属性

hello.world = Hello World

消息_中文_香港.属性

hello.world = \u4f60\u597d\u4e16\u754c

相关问题