Локализация приложения в стиле wordle на javascript. Смена набора слов и клавиатуры на локальную

Я написал игру по урокам в стиле ВОРДЛЕ. Взялся переводить ее на 3 языка с помощью библиотеки i18n. В принципе саму игру перевёл на 3 языка и локализовал. Собрал все стринги в отдельный файл. Всё работает. Почти... Осталась проблема со сменой клавиатуры и списка слов ( 365 слов, по слову на день). Как сделать чтоб переключалось на нужный файл со словами?

Локализация и перевод стрингов работает отлично;

/Languages/strings.js

import * as Localization from "expo-localization";
import i18n from "i18n-js";
// Set the key-value pairs for the different languages you want to support.
export default i18n.translations = {
  en: {
      title: 'WORDING',
    graz: "Congrats!",
    distr: "GUESS DISTRIBUTION",
    copy: "Copied successfully. Share your score on your social media",
    stats: "STATISTICS",
    next: "Next Word",
    share: "SHARE",
    played: 'Played',
    win: 'Win %',
    cur: 'Cur streak',
    max: 'Max streak',
  },

  ru: {
      title: 'СЛОВА',
    graz: "Поздравляем!",
    meh: "Жаль. Попробуйте завтра снова!",
    distr: "Статистика угадываний",
    copy: "Скопировано успешно, Поделитесь своим счетом в социальных сетях",
    stats: "Статистика",
    next: "Следующее слово",
    share: "SHARE",
    played: "Игр",
    win: 'Поб %',
    cur: 'Серия',
    max: 'Макс Серия',
  },

  de: {
      title: 'WORDING',
    graz: "Glückwunsch!",
    meh: "Schade, versuchen Siee morgen noch einmal",
    distr: "GUESS DISTRIBUTION",
    copy: "Erfolgreich kopiert, Teilen Sie Ihre Punktzahl in Ihren sozialen Medien",
    stats: "STATISTICS",
    next: "Nächstes Wort",
    share: "SHARE",
    played: 'Spiele',
    win: 'Gew %',
    cur: 'Serie',
    max: 'Max Serie',

  },
};
// Set the locale once at the beginning of your app.
i18n.locale = Localization.locale;

Лэйаут клавиатуры выглядит так:

/constants.js

export const ENTER = "ENTER";
export const CLEAR = "CLEAR";

export const keys = [
  ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"],
  ["a", "s", "d", "f", "g", "h", "j", "k", "l"],
  [ENTER, "z", "x", "c", "v", "b", "n", "m", CLEAR],
];

/Keyboard.styles.js

import { StyleSheet, Dimensions } from "react-native";
import { keys, colors } from "../../constants";

const screenWidth = Dimensions.get("window").width;
export const keyWidth = (screenWidth - 10) / keys[0].length;
const keyHeight = keyWidth * 1.5;

Я пробовал такой вариант:

export const keys = {
  if (locale = en) {
    return enKeys
  }, if (locale = de) {
    return deKeys
  }, if (locale = ru) {
    return ruKeys
  }
}

const enKeys = [
  ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"],
  ["a", "s", "d", "f", "g", "h", "j", "k", "l"],
  [ENTER, "z", "x", "c", "v", "b", "n", "m", CLEAR],
];

 const ruKeys = [
  ["й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х"],
  ["ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э"],
  [ENTER, "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", "ъ", CLEAR],
];

const deKeys = [
  ["q", "w", "e", "r", "t", "z", "u", "i", "o", "p"],
  ["a", "s", "d", "f", "g", "h", "j", "k", "l", "ü"],
  [ENTER, "z", "x", "c", "v", "b", "n", "m", "ö", "ä", CLEAR],
];

мне выдало ошибку:

TypeError: undefined is not an object (evaluating '_constants.keys[0].length')

что делаю не так и как сделать чтоб было "так"?

И второй вопрос по поводу файла со словами..

import words from "../words";

const Game = () => {
  //AsyncStorage.removeItem("@game");
  const word = words[dayOfTheYear];
  const letters = word.split(""); // [ 'h', 'e', 'l', 'l', 'o' ]
}

/words.js

export default [
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
  "hello",
  "world",
]

Как сделать лучше и правильно, создать список русских и немецких слов тут же или раскидать по файлам в папке Languages? И как сделать чтоб в нужной локе нужный файл со славами передавался?

ЗА РАНЕЕ ВСЕМ ОГРОМНОЕ СПАСИБО. И прошу прощенья за столь длинный вопрос))


Ответы (0 шт):