เชจเชตเชพ เชฆเซเชถเซ เช
เชจเซ เชชเซเชฐเชฆเซเชถเซเชจเซ เชถเซเชงเชเซเชณ เชเชฐเชคเซ เชเชเชคเชฐเชฐเชพเชทเซเชเซเชฐเซเชฏ เชเชเชชเชจเซเช เชฎเชพเชเซ เชเชคเซเชชเชพเชฆเชจ เชธเซเชฅเชพเชจเชฟเชเซเชเชฐเชฃ เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ. เชคเซเชตเซ เช เชฐเซเชคเซ, เชฎเซเชฌเชพเชเชฒ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชพเชเซ เชธเซเชฅเชพเชจเชฟเชเซเชเชฐเชฃ เชเชฐเซเชฐเซ เชเซ. เชเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชเชเชคเชฐเชฐเชพเชทเซเชเซเชฐเซเชฏ เชตเชฟเชธเซเชคเชฐเชฃ เชถเชฐเซ เชเชฐเซ เชเซ, เชคเซ เชฌเซเชเชพ เชฆเซเชถเชจเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชคเซเชฎเชจเซ เชฎเซเชณ เชญเชพเชทเชพเชฎเชพเช เชเชจเซเชเชฐเชซเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซ เชคเช เชเชชเชตเซ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ. เช เชฒเซเชเชฎเชพเช, เช
เชฎเซ เชชเซเชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฐเซเชเชเซเช เชจเซเชเชฟเชต เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซเชถเซเช
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ: เชถเซเชเซเชทเชฃเชฟเช เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ
"เชชเซเชฐเซเชซเซเชถเชจ เชเชพเชตเชพ เชกเซเชตเชฒเชชเชฐ" .
เช เชฎเซ เชฏเชพเชฆ เชเชฐเชพเชตเซเช เชเซเช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชเชเซ เชฎเชพเชเซ - Habr เชชเซเชฐเซเชฎเซ เชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชชเชฃ เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชเซเชฐเซเชธเชฎเชพเช เชจเซเชเชงเชฃเซ เชเชฐเชคเซ เชตเชเชคเซ 10 เชฐเซเชฌเชฒ เชกเชฟเชธเซเชเชพเชเชจเซเช.
เชธเชพเชงเชจเซ เช เชจเซ เชเซเชถเชณเชคเชพ
เช เชฒเซเชเชจเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชฐเซเชเชเซเช เชจเซเชเชฟเชต เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเซเชณเชญเซเชค เชเซเชถเชณเชคเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเชพเชฐเซเชฏเชเชพเชฐเซ เชฎเชถเซเชจเชจเซ เชธเซเชเชฟเชเชเซเชธเชฅเซ เชชเซเชคเชพเชจเซ เชชเชฐเชฟเชเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเซ เชเชฐเซ เชถเชเซ เชเซ
เช เชฎเชจเซ เชธเซเชซเซเชเชตเซเชฐ เชเซเชฒเซเชธเชจเชพ เช เชธเชเชธเซเชเชฐเชฃเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ:
- เชจเซเชก v10.15.0
- npm 6.4.1
- เชฏเชพเชฐเซเชจ 1.16.0
- เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ-เชฎเซเชณ 0.59.9
- เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ-เชฎเซเชณ-เชธเซเชฅเชพเชจเชฟเชเซเชเชฐเชฃ 1.1.3
- i18n-js 3.3.0
เชชเซเชฐเชพเชฐเชเชญ
เช เชฎเซ เชเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซเชถเซเช เชเซ เช เชเชเซเชฐเซเชเซ, เชซเซเชฐเซเชจเซเช เช เชจเซ เช เชฐเชฌเซเชจเซ เชธเชชเซเชฐเซเช เชเชฐเชถเซ. เชชเชนเซเชฒเชพ เชเชชเชฃเซ react-native-cli เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชจเชตเซ เชชเซเชฐเซเชเซเชเซเช เชฌเชจเชพเชตเซเช เชเซเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช เช เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
$ เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ-เชฎเซเชณ เชถเชฐเซเชเชค เชฌเชนเซเชญเชพเชทเซ
$ cd เชฌเชนเซเชญเชพเชทเซ
เชเชฐเซเชฐเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเซ เชเชฎเซเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชชเซเชฐเชฅเชฎ เชชเชเชฒเซเช เช เชจเซเชเซ เชฒเชเซเชจเซ react-native-localize เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซเช เชเซ:
$ เชฏเชพเชฐเซเชจ เชฐเซเชเชเซเช-เชจเซเชเชฟเชต-เชฒเซเชเชฒเชพเชเช เชเชฎเซเชฐเซ
เชเซ เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฎเชธเซเชฏเชพเช เชเชตเซ เชเซ,
เชฐเชฟเชเชเซเช-เชจเซเชเชฟเชต-เชฒเซเชเชฒเชพเชเช เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชจเซ เชฌเชนเซเชญเชพเชทเซ เชธเซเชตเชฟเชงเชพเชเชจเซ เชเชเซเชธเซเชธ เชเชชเซ เชเซ. เชชเชฐเชเชคเซ เชคเซเชฃเซเชจเซ เชตเชงเซ เชเช เชชเซเชธเซเชคเชเชพเชฒเชฏเชจเซ เชเชฐเซเชฐ เชเซ - i18n.
เช เชฒเซเช เชเชชเชฏเซเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ เชเซ
$เชฏเชพเชฐเซเชจ i18n-js เชเชฎเซเชฐเซ
เช เซเช เชเซ, เชเชพเชฐเชฃ เชเซ i18n-js เชเซเชถเซเชเช เช เชฅเชตเชพ เชฎเซเชฎเซเชเชเซเชถเชจ เชชเซเชฐเชฆเชพเชจ เชเชฐเชคเซเช เชจเชฅเซ, เชนเซเช เช เชฎเชพเชเซ lodash.memoize เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชธเซเชเชจ เชเชฐเซเช เชเซเช:
$ เชฏเชพเชฐเซเชจ เชเชฎเซเชฐเซ lodash.memoize
เช เชจเซเชตเชพเชฆเซ เชธเชพเชฅเซ เชเชพเชฎ
เชเชชเซเชฒเชฟเชเซเชถเชจ เช เชจเซเชฏ เชญเชพเชทเชพเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชคเซ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชชเชนเซเชฒเชพ src เชจเซ เช เชเชฆเชฐ เช เชจเซเชตเชพเชฆ เชจเชฟเชฐเซเชฆเซเชถเชฟเชเชพ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชชเชเซ เชฆเชฐเซเช เชญเชพเชทเชพ เชฎเชพเชเซ เชคเซเชฐเชฃ JSON เชซเชพเชเชฒเซ.
1. เช เชเชเซเชฐเซเชเซ เชฎเชพเชเซ en.json;
2. เชซเซเชฐเซเชจเซเช เชฎเชพเชเซ fr.json;
3. เช เชฐเชฌเซ เชฎเชพเชเซ ar.json.
เช เชซเชพเชเชฒเซเชฎเชพเช เชเซ เช เชจเซ เชฎเซเชฒเซเชฏเซ เชธเชพเชฅเซ JSON เชเชฌเซเชเซเชเซเชเซเชธ เชเซ. เชเซ เชฆเชฐเซเช เชญเชพเชทเชพ เชฎเชพเชเซ เชธเชฎเชพเชจ เชนเชถเซ. เชคเซเชจเซ เชเชชเชฏเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชเซเชเซเชธเซเช เชฎเชพเชนเชฟเชคเซ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ.
เชฎเซเชฒเซเชฏ เช เชเซเชเซเชธเซเช เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชฌเชคเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช เชเชเซเชฐเซเชเซ:
{"เชนเซเชฒเซ": "เชนเซเชฒเซ เชตเชฐเซเชฒเซเชก!"}
เชซเซเชฐเซเชจเซเช
{"เชนเซเชฒเซ": "เชธเชฒเชพเช เชฒเซ เชฎเซเชจเซเชกเซ!"}
ะัะฐะฑัะบะธะน
{ "เชนเซเชฒเซ": "ุฃููุงู ุจุงูุนุงูู "}
เชคเชฎเซ เชคเซ เช เชฐเซเชคเซ เช เชจเซเชฏ เชญเชพเชทเชพเช เชเชฎเซเชฐเซ เชถเชเซ เชเซ.
เชฎเซเชเซเชฏ เชเซเชก
เช เชฌเชฟเชเชฆเซเช, เชคเชฎเชพเชฐเซ App.js เชซเชพเชเชฒ เชเซเชฒเชตเชพเชจเซ เช เชจเซ เชคเซเชฎเชพเช เชเชฏเชพเชค เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
import React from "react";
import * as RNLocalize from "react-native-localize";
import i18n from "i18n-js";
import memoize from "lodash.memoize"; // Use for caching/memoize for better performance
import {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} from "react-native";
เช เชชเชเซ, เชธเชนเชพเชฏเช เชเชพเชฐเซเชฏเซ เช เชจเซ เชธเซเชฅเชฟเชฐเชพเชเชเซ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชชเชเซเชฅเซ เชเชชเชฏเซเชเซ เชฅเชถเซ.
const translationGetters = {
// lazy requires (metro bundler does not support symlinks)
ar: () => require("./src/translations/ar.json"),
en: () => require("./src/translations/en.json"),
fr: () => require("./src/translations/fr.json")
};
const translate = memoize(
(key, config) => i18n.t(key, config),
(key, config) => (config ? key + JSON.stringify(config) : key)
);
const setI18nConfig = () => {
// fallback if no available language fits
const fallback = { languageTag: "en", isRTL: false };
const { languageTag, isRTL } =
RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
fallback;
// clear translation cache
translate.cache.clear();
// update layout direction
I18nManager.forceRTL(isRTL);
// set i18n-js config
i18n.translations = { [languageTag]: translationGetters[languageTag]() };
i18n.locale = languageTag;
};
เชธเชพเชฐเซเช, เชนเชตเซ เชเชพเชฒเซ เชเชช เชเซเชฒเชพเชธเชจเซ เชเช เชเชเช เชฌเชจเชพเชตเซเช:
export default class App extends React.Component {
constructor(props) {
super(props);
setI18nConfig(); // set initial config
}
componentDidMount() {
RNLocalize.addEventListener("change", this.handleLocalizationChange);
}
componentWillUnmount() {
RNLocalize.removeEventListener("change", this.handleLocalizationChange);
}
handleLocalizationChange = () => {
setI18nConfig();
this.forceUpdate();
};
render() {
return (
<SafeAreaView style={styles.safeArea}>
<Text style={styles.value}>{translate("hello")}</Text>
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
safeArea: {
backgroundColor: "white",
flex: 1,
alignItems: "center",
justifyContent: "center"
},
value: {
fontSize: 18
}
});
เชชเซเชฐเชฅเชฎ เชคเชคเซเชต, setI18nConfig(), เชชเซเชฐเชพเชฐเชเชญเชฟเช เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเซเชฏเซเชเชฟเชค เชเชฐเซ เชเซ.
เชชเชเซ เชคเชฎเชพเชฐเซ componentDidMount() เชฎเชพเช เชเชตเซเชจเซเช เชฒเชฟเชธเชจเชฐ เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชเชเช เช เชชเชกเซเชเซเชธ เชธเชพเชเชญเชณเชถเซ เช เชจเซ เชเซเชฏเชพเชฐเซ เชคเซ เชฅเชถเซ เชคเซเชฏเชพเชฐเซ เชนเซเชจเซเชกเชฒ เชฒเซเชเชฒเชพเชเชเซเชถเชจ เชเซเชจเซเช() เชจเซ เชเซเชฒ เชเชฐเชถเซ.
handleLocalizationChange() เชชเชฆเซเชงเชคเชฟ setI18nConfig() เช เชจเซ forceUpdate() เชจเซ เชธเชเซเชฐเชฟเชฏ เชเชฐเซ เชเซ. Android เชเชชเชเชฐเชฃเซ เชฎเชพเชเซ เช เชเชฐเซเชฐเซ เชเซ เชเชพเชฐเชฃ เชเซ เชซเซเชฐเชซเชพเชฐเซ เชงเซเชฏเชพเชจเชชเชพเชคเซเชฐ เชฌเชจเซ เชคเซ เชฎเชพเชเซ เชเชเช เชฐเซเชจเซเชกเชฐ เชฅเชฏเซเชฒ เชนเซเชตเซเช เชเชตเชถเซเชฏเช เชเซ.
เชชเชเซ เชคเชฎเชพเชฐเซ componentWillUnmount() เชชเชฆเซเชงเชคเชฟเชฎเชพเชเชฅเซ เชถเซเชฐเชตเชฃเชจเซ เชฆเซเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชเซเชฒเซเชฒเซ, render() translate() เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชจเซ เชคเซเชฎเชพเช เชเซ เชชเซเชฐเชพเชฎเซเชเชฐ เชเชฎเซเชฐเซเชจเซ เชนเซเชฒเซ เชชเชฐเชค เชเชฐเซ เชเซ. เช เชชเชเชฒเชพเชเช เชชเชเซ, เชเชชเซเชฒเชฟเชเซเชถเชจ เชเช เชญเชพเชทเชพเชจเซ เชเชฐเซเชฐ เชเซ เชคเซ "เชธเชฎเชเชตเชพ" เช เชจเซ เชคเซเชฎเชพเช เชธเชเชฆเซเชถเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชธเชฎเชฐเซเชฅ เชนเชถเซ.
เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชจเซเช
เช เชจเซเชตเชพเชฆ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชคเชชเชพเชธเชตเชพเชจเซ เชนเชตเซ เชธเชฎเชฏ เชเซ.
เชชเซเชฐเชฅเชฎ, เช เชฎเซ เชเชพเชเชช เชเชฐเซเชจเซ เชธเชฟเชฎเซเชฏเซเชฒเซเชเชฐ เช เชฅเชตเชพ เชเชฎเซเชฏเซเชฒเซเชเชฐเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชเช เชเชฐเซเช เชเซเช
$ เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ-เชจเซเชเชฟเชต เชฐเชจ-เชเชเชเชเชธ
$ เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ-เชจเซเชเชฟเชต เชฐเชจ-เชเชจเซเชกเซเชฐเซเชเชก
เชคเซ เชเชจเชพ เชเซเชตเซเช เชเชเชเช เชฆเซเชเชพเชถเซ:
เชนเชตเซ เชคเชฎเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชเช เชเชฐเซเชจเซ เชญเชพเชทเชพเชจเซ เชซเซเชฐเซเชจเซเชเชฎเชพเช เชฌเชฆเชฒเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชถเชเซ เชเซ.
เช
เชฎเซ เช
เชฐเชฌเซ เชธเชพเชฅเซ เชธเชฎเชพเชจ เชตเชธเซเชคเซ เชเชฐเซเช เชเซเช, เชคเซเชฎเชพเช เชเซเช เชคเชซเชพเชตเชค เชจเชฅเซ.
เช เชคเซเชฏเชพเชฐ เชธเซเชงเซ เชเซเชฌ เชธเชพเชฐเซเช.
เชชเชฐเชเชคเซ เชเซ เชคเชฎเซ เชเชตเซ เชฐเซเชจเซเชกเชฎ เชญเชพเชทเชพ เชชเชธเชเชฆ เชเชฐเซ เชเซ เชเซเชจเชพ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช เชเซเช เช เชจเซเชตเชพเชฆ เชจเชฅเซ, เชคเซ เชถเซเช เชฅเชถเซ?
เชคเซ เชคเชพเชฐเชฃ เชเชชเซ เชเซ เชเซ findBestLanguage เชจเซเช เชเชพเชฐเซเชฏ เชคเชฎเชพเชฎ เชเชชเชฒเชฌเซเชง เชญเชพเชทเชพเชฎเชพเชเชฅเซ เชถเซเชฐเซเชทเซเช เช เชจเซเชตเชพเชฆ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชจเซเช เชเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชกเชฟเชซเซเชฒเซเช เชญเชพเชทเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ.
เช เชฎเซ เชซเซเชจ เชธเซเชเชฟเชเชเซเชธ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, iOS เชเชฎเซเชฏเซเชฒเซเชเชฐเชฎเชพเช เชคเชฎเซ เชญเชพเชทเชพเชเชจเซ เชเซเชฐเชฎ เชเซเช เชถเชเซ เชเซ.
เชเซ เชชเชธเชเชฆ เชเชฐเซเชฒเซ เชญเชพเชทเชพ เชชเชธเชเชฆเชเซเชจเซ เชญเชพเชทเชพ เชจเชฅเซ, เชคเซ FindBestAvailableLanguage เช
เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชชเชฐเชค เชเชฐเซ เชเซ เชเซเชฅเซ เชกเชฟเชซเซเชฒเซเช เชญเชพเชทเชพ เชฌเชคเชพเชตเชตเชพเชฎเชพเช เชเชตเซ.
เชฌเซเชจเชธ
react-native-localize เชชเชพเชธเซ เชเช API เชเซ เชเซ เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชญเชพเชทเชพ เชเชเชเซเชจเซ เชเชเซเชธเซเชธ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชคเชฎเซ เชเชพเชฎ เชถเชฐเซ เชเชฐเซ เชคเซ เชชเชนเซเชฒเชพเช,
เชคเชพเชฐเชฃเซ
เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชฌเชนเซเชญเชพเชทเซ เชฌเชจเชพเชตเซ เชถเชเชพเชฏ เชเซ. React-native-localize เช เชเช เชถเซเชฐเซเชทเซเช เชตเชฟเชเชฒเซเชช เชเซ เชเซ เชคเชฎเชจเซ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชงเชพเชฐเชจเซ เชตเชฟเชธเซเชคเซเชค เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
เชชเซเชฐเซเชเซเชเซเช เชธเซเชฐเซเชค เชเซเชก
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ:
- เชฌเซ เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"เชนเซเช เชชเซเชฐเซ เชตเซเชฌ เชกเซเชตเชฒเชชเชฐ เชเซเช" .- เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ
"เชถเชฐเซเชเชคเชฅเซ C# เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ" .- เชเช เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"0 เชฅเซ PRO เชธเซเชงเซ PHP เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ" .
เชธเซเชฐเซเชธ: www.habr.com