Хранение текстов для сайтов на русском и на английском

Собираюсь писать свой сайт на Node.js/Express, где будут мои: блог/дневник/статьи и портфолио на двух языках: русский и английский. Я выяснил, что самой популярный модуль облегчающий ведение сайта на двух языках это i18n

Создаются два .json файла в папке “locales”, где хранятся тексты на двух языках:

en.json


{
	"Hello": "Hello"
}

ru.json


{
	"Hello": "Привет"
}

Я не понимаю, как я буду ориентироваться в этих файлах по мере роста количества текста. Эти файлы будут разбухать всё больше и больше. Ключи могут начать повторяться.

Так они вроде для функционала сайта, а не для контента.
Контент в БД.

Ну и в Руби похожая система, там файлы как-то разбиваются, а не всё в одном. https://github.com/Hexlet/hexlet-cv/tree/master/config/locales

Немного не по теме, но всё же. У тебя JSON неверно написан или я ошибаюсь? Вроде как должно быть всё обернуто в [], то есть,


[
	{"Hello": "Hello"}
]

объект можно и на верхнем уровне.
[ ] - массив (значения), { } - объект (ключи/значения)

Понятно. Я сайтами никогда не занимался. Есть повод тренироваться с MySQL. Я думаю, мне пока должно хватить 5МБ, которые даются на бесплатной версии MySQL на Heroku. Если не хватит, то перейду на $7 в месяц.

Я поищу, может на Node.js так тоже можно. Функционал сайта тоже может расти, но пока мне хватит пары .json файлов.

На Хероку для Postgre вроде больше дают.

Эти файлы автоматом генерируются при первом запуске, при выполнении “i18n.configure”, где я перечисляю какие локали использовать. Первый раз генерируются одинаковые файлы { “Hello”: “Hello” }, и я пишу в “ru.json” пишу перевод.

У меня под рукой пример простого сервера на TypeScript. В примере по умолчанию вывелось бы в консоль “Hello”, но команда “i18n.setLocale(“ru”);” выставляет локаль на русский, поэтому выводится “Привет”:


import * as express from "express";
import * as i18n from "i18n";
import * as http from "http";

class App
{
    public constructor()
    {
        i18n.configure({
            locales: ["en", "ru"],
            directory: __dirname + "/locales"
        });

        let app = express();

        app.set("view engine", "hbs");

        let httpServer = http.createServer(app);
        httpServer.listen(3000);

        app.use(i18n.init);
        i18n.setLocale("ru");
        console.log(i18n.__("Hello"));
    }
}

new App();

Надо будет эту БД тоже осваивать. Посмотреть в чём разница между командами MySQL и Postgre. Я ещё MongoDB осваивал, но она мне не понравилась: много места занимает на жёстком (1 ГБ), а крайний раз она вообще почему-то не захотела работать после переустановки винды, я даже разбираться не стал, чтобы время не терять и место на ноуте освободил. У меня в SQL очень мало опыта. Книгу начал читать опять сначала на английском: SQL in 10 Minutes, Sams Teach Yourself (4th Edition) Мне очень она нравится. В ней простые практические упражнения. Знаю, только несколько основных базовых команд. Есть повод упражняться на своём сайте и на простых браузерных игрушках.

если ORM взять, то ни в чем )

Ну и стандартный SQL почти одинаковый.

Я книги по SQL так и не читал пока, только давно лекции в вузе и курс на Хекслете в этом году.

Да, я уже давно стараюсь не ставить ничего лишнего себе, намного проще через вагрант или докер.

Если ORM, то как вариант для разработки SQLite у себя поставить проще всего.

Ну и для веб-разработки удобнее на линуксе (или маке) сидеть.

А это отличная мысль. Я тогда смогу обойти ограничения в 5 МБ для MySQL на Heroku. Правда, я не могу пока оценить для меня 5 МБ - это много или мало. Нужно будет попробовать сохранять тесты и посмотреть, как тратятся 5 МБ.

Я работаю в VSCode. Пакеты NPM ставлю и работаю с Git через “Far Manager”. Привык. Мне кажется, удобно. Это всегда так, когда привыкаешь и другое не пробуешь. Пока сосредотачиваю время и ресурсы в одном направлении, в приоритете TypeScript и 2D/3D графика в браузере на WebGL (3D анимации и моделирование). Мак я бы очень хотел купить может через год или два, чтобы собирать нативные приложения для iOS из Xamarin на OpenGL и C#. Сейчас нужно сосредоточить время и силы только на приоритетных для меня вещах.

Я на винде ConEmu + Clint использовал для консоли.

И Chocolatey для установки программ.
Особенно удобно на чистой винде всё установить скопировав команду типа

choco install 7zip.install audacity autohotkey.install calibre chocolateygui ConEmu cpu-z crystaldiskinfo.install crystaldiskmark curl discord ditto ffmpeg fiddler Firefox git.install gitkraken GoogleChrome gpu-z hwinfo.install hwmonitor irfanview kdiff3 kitty llvm mpc-hc msiafterburner notepadplusplus.install obs-studio paint.net prime95.portable pycharm-community python3 qbittorrent  sharex skype slack sqlitebrowser steam sysinternals teamviewer totalcommander vlc winrar -y

choco install foxitreader --ia '/MERGETASKS="!desktopicon,!setdefaultreader,!displayinbrowser /COMPONENTS=*pdfviewer,*ffse,*installprint,*ffaddin,*ffspellcheck,!connectedpdf"' -y

Я имел в виду у себя SQLite (легко установить, может быть вообще ничего не надо кроме пакета нпм), на сервере Postgre/MySQL.
Если использовать ОРМ или какую-то другую абстракцию без SQL напрямую, то в стандартных случаях разницы не будет.

На Хероку у бесплатного Postgre ограничение 10к записей.

Не слышал о таком. Это сэкономит кучу времени после установки винды.

А почему на Heroku не использовать SQLite? Тогда ограничений никаких не будет. Правда, может и 5 МБайт на MySQL для меня это выше крыши, а если не хватит, то можно на SQLite перейти, ведь изменения кода минимальны будут, потому что команды те же самые. Надо будет, кстати, поизучать, если разница в SQL между SQLite и MySQL. Я думал, что если и есть различия, то незначительные, но всё равно нужно знать об этих различиях.

Нужно что-то одно использовать: либо SQlite, либо Postgre, либо MySQL. Я использую автоматическое развёртывание из GitHub на Heroku. Я на странице приложения на Heroku во вкладке Deploy активирую “Connect to GitHub” и ставлю галочку “Auto-Deploy”. В этом случае максимально быстро происходит развёртывание сервера на Heroku после команды “git push”. Нельзя локально использовать SQLite, а развёртывать на сервере, используя MySQL. Я сразу разрабатываю и тестирую на реальном сервере, особенно, если это касается мультиплеера на socket.io. Свой сайт с блогом и портфолио мне нужно будет сразу развёртывать и по мере развития пополнять и изменять.

С точки зрения установки через NPM нет никакой разницы между MySQL и SQLite:

MySQL:

SQlite:

Вторая команда нужна для поддержки TypeScript.

Интересно то, что на Node.js не нужно ставить сервер MySQL, как в случае с PHP, где нужно было ставить XMPP, что отнимало 1 ГБайт на жёстком, если не ошибаюсь. А если ставить MySQL локально через NPM, то занимает копейки, чуть больше 1 МБайта (если добавить @types/mysql, то всё весит почти 2 МБайта)

А что ещё больше удивляет, что установленный локально SQLite с помощью NPM занимает больше, чем MySQL - 12 МБайт (если добавить @types/sqlite3, то всё весит почти 13 МБайт)

Я пока буду использовать MySQL, потому что место на жёстком критично. 2 против 13 МБайт - это существенно, если создать десятки примеров с разными GitHub репозиториями. Попробовать нужно и SQlite на Heroku. Это хак получается. На бесплатной версии есть ограничение на MySQL, а с помощью SQlite ограничение снимается.

Для MySQL/Postgre еще сервер нужно установить.

Нужно.
Пакет конечно установится, но надо ж подключаться куда-то.

Обычно не используют для такого, хотя для небольшой посещаемости наверно хватит.

В идеале да, но

Некоторые так делают и всё норм )

В моём случае не нужно, потому что я хотя и запускаюсь локально, но соединяюсь у удалённой базой данных MySQL на Heroku. Я развернул простой пример из этого урока Metanit’а по MySQL в Node.js: https://typescript-mysql-from-metanit.herokuapp.com/

То есть разница между MySQL и SQLite в скорости обращения? Условно говоря, если посещаемость будет 100 человек одновременно, то, к примеру, с SQLite пользователь будет ждать 3 секунды для обращения к SQLite и пол секунды для обращения к MySQL? Примерно хотелось бы ориентироваться в разнице.

У меня очень плохие знания чистого SQL. Совершенно не хватает опыта в ежедневном практическом использовании. Я ещё не отработал его достаточно на практике, чтобы довести до автоматизма. Я в общем-то только начал осваиваться с MySQL из TypeScript. Задача со своим блогом и браузерными простыми игрушками идеально подходит, чтобы отрабатывать всё в комплексе на практике. Я пока не хочу разбираться как устанавливать пакеты для баз данных так, чтобы не было разницы. Нельзя сейчас время терять. Нужно отрабатывать, что работает и пока удовлетворяет. Мне ещё предстоит разобраться с математикой матриц скелетных анимаций механизмов в 3D с интерполяцией углов поворотов с помощью кватернионов. Скелетные анимации пока не для игр, а для механизмов. Сейчас я c i18n разобрался, как перевод интерфейса делать. MySQL тоже нормально работает. Так что эта тема завершена. Нужно теперь на 3D переключиться, на скелетные анимации в Blender и импорте этих анимаций в WebGL через .dae (Collada) файл. Это XML файл. Я его научился парсить на XPath из TypeScript. Это всё нужно отрабатывать на практике на примерах и более плотно переходить к GLSL-шейдерам на WebGL.

SQLite медленный при записи - транзакция блокирует всю базу, а не таблицы или их строки. В результате в единицу времени только одна операция записи

а, ну да, так тоже можно )

Некоторые вообще делают отдельные сервера для разработчиков и почти всё там разворачивают. В ВСКоде даже есть какие-то фичи для этого. https://code.visualstudio.com/blogs/2019/05/02/remote-development
Просто это может быть дороже (на том же Хероку может не хватить лимита бесплатных воркеров если много сайтов и активно использовать) и бывает неудобно/медленнее, особенно если не vim/emacs.
Из плюсов: можно не иметь мощный комп, и можно легко подключиться помочь кому-то удаленно.

У меня есть очень плохая привычка. Я могу забросить важные и первостепенные вещи, не отработать их до автоматизма, а начать улучшать то, что я ещё не пробовал. В результате я могу закопаться, забыть что я вообще собирался делать, насоздавать кучу проектов на Trello, и уйти очень далеко в сторону. Сейчас всё отлично работает. Мощности моего ноутбука хватает, чтобы работать с MySQL удалённо. А приложения у меня все спят. Я лимит ещё очень долго не исчерпаю, а если и исчерпаю, то узнаю, каково это. В крайнем случае, перейду на $7 в месяц. Я думаю, у моего сайта будет очень низкая посещаемость ещё очень долго. А из сетевых игрушек я только Крестики-Нолики начал и тоже думаю будет низкая посещаемость. Нужно отрабатывать и доводить до автоматизма, что уже есть, создавая разнообразные проекты по моим тематикам.

там за БД отдельно платить надо, от 10$.

Хероку в целом хорош тем, что почти всё делают они, но стоит намного дороже обычных VPS (DigitalOcean, Vultr, AWS, …) если не хватило бесплатного.

Пока потренируюсь на бесплатном, чтобы поизучать TypeScript, MySQL и то что мне необходимо, а потом видно будет.