diff --git a/server/proxies.json b/server/proxies.json
index 15605d4ec..a19cf94a1 100644
--- a/server/proxies.json
+++ b/server/proxies.json
@@ -6,7 +6,9 @@
"/accounts/",
"/csrf_token/",
"/get_image/",
- "/session/"
+ "/i18n/",
+ "/session/",
+ "/site-api/"
]
}
]
diff --git a/src/components/footer/footer.jsx b/src/components/footer/footer.jsx
index 7e2594627..751938496 100644
--- a/src/components/footer/footer.jsx
+++ b/src/components/footer/footer.jsx
@@ -1,9 +1,43 @@
var React = require('react');
+var log = require('../../log.js');
+
+var Api = require('../../mixins/api.jsx');
+var CookieMixinFactory = require('../../mixins/cookieMixinFactory.jsx');
+var LanguageChooser = require('../languagechooser/languagechooser.jsx');
+
require('./footer.scss');
var Footer = React.createClass({
type: 'Footer',
+ mixins: [
+ Api,
+ // Provides useScratchlanguage
+ CookieMixinFactory('scratchlanguage', '/site-api/i18n/set-preferred-language/')
+ ],
+ getInitialState: function () {
+ return {
+ language: 'en'
+ };
+ },
+ componentDidMount: function () {
+ this.updateLanguage();
+ },
+ updateLanguage: function () {
+ this.useScratchlanguage(function (err, language) {
+ if (err) return log.error(err);
+ this.setState({language: language});
+ }.bind(this));
+ },
+ handleSetLanguage: function (e) {
+ if (e) e.preventDefault();
+ this.api({
+ host: '',
+ uri: '/i18n/setlang/'
+ }, function (err, body) {
+ if (body) this.updateLanguage();
+ }.bind(this));
+ },
render: function () {
return (
@@ -52,6 +86,8 @@ var Footer = React.createClass({
+
+
Scratch is a project of the Lifelong Kindergarten Group at the MIT Media Lab
diff --git a/src/components/footer/footer.scss b/src/components/footer/footer.scss
index 15151d51c..b428a7fbf 100644
--- a/src/components/footer/footer.scss
+++ b/src/components/footer/footer.scss
@@ -5,6 +5,7 @@
background-color: $ui-gray;
padding: 10px 0;
color: $type-gray;
+ font-size: .85rem;
.lists {
display: flex;
@@ -18,7 +19,6 @@
width: 130pt;
vertical-align: top;
text-align: left;
- font-size: .85rem;
}
dt {
@@ -42,4 +42,8 @@
font-size: .7rem;
}
}
+
+ .language-chooser {
+ text-align: center;
+ }
}
diff --git a/src/components/forms/select.jsx b/src/components/forms/select.jsx
new file mode 100644
index 000000000..62b6d9aa8
--- /dev/null
+++ b/src/components/forms/select.jsx
@@ -0,0 +1,24 @@
+var React = require('react');
+var classNames = require('classnames');
+
+require('./select.scss');
+
+var Select = React.createClass({
+ type: 'Select',
+ propTypes: {
+
+ },
+ render: function () {
+ var classes = classNames(
+ 'select',
+ this.props.className
+ );
+ return (
+
+ );
+ }
+});
+
+module.exports = Select;
diff --git a/src/components/forms/select.scss b/src/components/forms/select.scss
new file mode 100644
index 000000000..34e1dd16c
--- /dev/null
+++ b/src/components/forms/select.scss
@@ -0,0 +1,9 @@
+@import "../../colors";
+
+.select {
+ background-color: $ui-white;
+ width: 220px;
+ height: 28px;
+ line-height: 28px;
+ font-size: 1em;
+}
diff --git a/src/components/languagechooser/languagechooser.jsx b/src/components/languagechooser/languagechooser.jsx
new file mode 100644
index 000000000..6648b7385
--- /dev/null
+++ b/src/components/languagechooser/languagechooser.jsx
@@ -0,0 +1,44 @@
+var classNames = require('classnames');
+
+var React = require('react');
+
+var Select = require('../forms/select.jsx');
+
+require('./languagechooser.scss');
+
+var LanguageChooser = React.createClass({
+ type: 'LanguageChooser',
+ propTypes: {
+ choice: React.PropTypes.string,
+ languages: React.PropTypes.object
+ },
+ getDefaultProps: function () {
+ return {
+ choice: 'en',
+ languages: require('./languages.json')
+ };
+ },
+ render: function () {
+ var classes = classNames(
+ 'language-chooser',
+ this.props.className
+ );
+ return (
+
+ );
+ }
+});
+
+module.exports = LanguageChooser;
diff --git a/src/components/languagechooser/languagechooser.scss b/src/components/languagechooser/languagechooser.scss
new file mode 100644
index 000000000..abe1a6d34
--- /dev/null
+++ b/src/components/languagechooser/languagechooser.scss
@@ -0,0 +1,3 @@
+.language-chooser {
+
+}
diff --git a/src/components/languagechooser/languages.json b/src/components/languagechooser/languages.json
new file mode 100644
index 000000000..deaaa035b
--- /dev/null
+++ b/src/components/languagechooser/languages.json
@@ -0,0 +1,72 @@
+{
+ "en": "English",
+ "an": "Aragonés",
+ "ast": "Asturianu",
+ "id": "Bahasa Indonesia",
+ "ms": "Bahasa Melayu",
+ "ca": "Català",
+ "cs": "Česky",
+ "cy": "Cymraeg",
+ "da": "Dansk",
+ "fa-af": "Dari",
+ "de": "Deutsch",
+ "yum": "Edible Scratch",
+ "et": "Eesti",
+ "eo": "Esperanto",
+ "es": "Español",
+ "eu": "Euskara",
+ "fr": "Français",
+ "fr-ca": "Français (Canada)",
+ "ga": "Gaeilge",
+ "gd": "Gàidhlig",
+ "gl": "Galego",
+ "hr": "Hrvatski",
+ "is": "Íslenska",
+ "it": "Italiano",
+ "rw": "Kinyarwanda",
+ "ku": "Kurdî",
+ "la": "Latina",
+ "lv": "Latviešu",
+ "lt": "Lietuvių",
+ "hu": "Magyar",
+ "mt": "Malti",
+ "cat": "Meow",
+ "nl": "Nederlands",
+ "nb": "Norsk Bokmål",
+ "pl": "Polski",
+ "pt": "Português",
+ "pt-br": "Português Brasileiro",
+ "ro": "Română",
+ "sc": "Sardu",
+ "sk": "Slovenčina",
+ "sl": "Slovenščina",
+ "fi": "suomi",
+ "sv": "Svenska",
+ "nai": "Tepehuan",
+ "vi": "Tiếng Việt",
+ "tr": "Türkçe",
+ "ab": "Аҧсшәа",
+ "ar": "العربية",
+ "bg": "Български",
+ "el": "Ελληνικά",
+ "fa": "فارسی",
+ "he": "עִבְרִית",
+ "hi": "हिन्दी",
+ "hy": "Հայերեն",
+ "ja": "日本語",
+ "ja-hr": "にほんご",
+ "km": "សំលៀកបំពាក",
+ "kn": "ಭಾಷೆ-ಹೆಸರು",
+ "ko": "한국어",
+ "mk": "Македонски",
+ "ml": "മലയാളം",
+ "mn": "Монгол хэл",
+ "mr": "मराठी",
+ "my": "မြန်မာဘာသာ",
+ "ru": "Русский",
+ "sr": "Српски",
+ "th": "ไทย",
+ "uk": "Українська",
+ "zh-cn": "简体中文",
+ "zh-tw": "正體中文"
+}
\ No newline at end of file