我想为我的WebApplication编写CMS。目前,我使用PHP作为数据源,例如
Automatic-Module-Name
或
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.padamski</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.pgs-soft</groupId>
<artifactId>HttpClientMock</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifestEntries>
<Automatic-Module-Name>com.padamski.test</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
</project>
每次在代码(PHP后端)中对其进行修改都是令人讨厌的。因此,我想为我使用两种语言(德语和英语)实现UserInterface。
我不知道在MySQL中管理此类封装的最佳方法是什么。
这里是一个可以理解的示例codepen
答案 0 :(得分:0)
您有两个问题。首先,您要为数据的每个单独的变体存储格式化的字符串。仅应存储数据。数据是灵活且易于使用的,格式化的数据则不是。格式化应动态应用。
例如,只存储"bladder accumulator for up to 3 spare stroke (3x90°)"
,而不是存储3
。将3
检索出来,然后在可能的最后一刻将其格式化为:
$num = 3;
$format = "bladder accumulator for up to %d spare stroke (%dx90°)";
$text = sprintf($format, $num, $num);
然后向用户显示$text
。它不存储在数据库中。
接下来,我们添加本地化。 gettext
提供了基本的本地化。 gettext
的工作原理是用您编写的翻译表中的本地化字符串替换字符串。
$num = 3;
$format = gettext("bladder accumulator for up to %d spare stroke (%dx90°)");
$text = sprintf($format, $num, $num);
gettext
调用将在适合您项目的语言文件中查找bladder accumulator for up to %d spare stroke (%dx90°)
的翻译。对于德语,它将为locale/de/LC_MESSAGES
。在该文件中,您将为翻译提供相同的格式选项Blasenspeicher mit bis zu %d Stellfahrt (%dx90°)
,而gettext
将返回该格式。
Here's a tutorial on using gettext with PHP,将其全部设置并使用翻译文件。
gettext
有其局限性,you can read all about them,但这是本地化的良好开端。
答案 1 :(得分:0)
如果要使用MySQL进行本地化,则需要一个名为语言的表,例如:
语言表:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import { AsyncStorage } from 'AsyncStorage';
class App extends Component {
state = {};
constructor(props) {
super(props);
}
componentDidMount(){
this.getItem().then((phone)=>{
this.setState({
phone
});
})
}
async getItem(){
return await AsyncStorage.getItem('phone');
}
async setItem(){
await AsyncStorage.setItem('phone','919303580');
}
render() {
return (
<div className="App">
<p>Phone here:</p>
{this.state.phone && <p>{this.state.phone}</p>}
<button onClick={this.setItem.bind(this)}>Click me</button>
</div>
);
}
}
export default App;
bladder_tanks表:
id (PRIMARY KEY) | language (VARCHAR) |
1 en
2 de
以此类推,您就明白了。
因此,现在当您需要英语版本时,您仅获取language_id 1的记录:
id (PRIMARY KEY) | language_id (reference) | amount_bladder (UNSIGNED INT) | text (VARCHAR) |
1 1 0 0
2 1 1 bladder accumulator for up to 1 spare stroke (1x90°)
3 2 0 0
保存或更新内容相同
SELECT * FROM bladder_tanks WHERE language_id = 1 ORDER BY amount_bladder
您的控制器动作/功能可能如下所示:
UPDATE bladder_tanks SET text = "blah blah" WHERE amount_bladder = 1 AND language_id = 1
INSERT INTO bladder_tanks (language_id, amount_bladder, text) VALUES (1, 1, "blah blah")
希望为您提供如何工作的基本概念。 我试图使它尽可能简单,所以我省略了created_at,updated_at额外的列(不过,您应该根据自己的需要来构造它)