aboutsummaryrefslogtreecommitdiffstats
path: root/src/gtrans/gtrans.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtrans/gtrans.c')
-rw-r--r--src/gtrans/gtrans.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/gtrans/gtrans.c b/src/gtrans/gtrans.c
new file mode 100644
index 00000000..07409838
--- /dev/null
+++ b/src/gtrans/gtrans.c
@@ -0,0 +1,77 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ */
+
+#include <string.h>
+#include "../../gfx.h"
+
+#if GFX_USE_GTRANS
+
+static const transTable* _languageBase;
+static const transTable* _languageCurrent;
+
+void _gtransInit(void)
+{
+ _languageBase = 0;
+ _languageCurrent = 0;
+}
+
+void _gtransDeinit(void)
+{
+}
+
+const char* gtransString(const char* string)
+{
+ // Find the index of the specified string in the base language table
+ size_t i = 0;
+ while (1) {
+ // Prevent overflow
+ if (i >= _languageBase->numEntries) {
+ return string;
+ }
+
+ // Check if we found the string
+ if (strcmp(string, _languageBase->strings[i]) == 0) {
+ break;
+ }
+
+ // Otherwise keep going
+ i++;
+ }
+
+ // Make sure that the index exists in the current language table
+ if (i >= _languageCurrent->numEntries) {
+ return string;
+ }
+
+ // Return the translated string
+ return _languageCurrent->strings[i];
+}
+
+const char* gtransIndex(unsigned index)
+{
+ if (!_languageCurrent) {
+ return 0;
+ }
+
+ if (index >= _languageCurrent->numEntries) {
+ return 0;
+ }
+
+ return _languageCurrent->strings[index];
+}
+
+void gtransSetBaseLanguage(const transTable* const translation)
+{
+ _languageBase = translation;
+}
+
+void gtransSetLanguage(const transTable* const translation)
+{
+ _languageCurrent = translation;
+}
+
+#endif /* GFX_USE_GTRANS */