Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Сохранение текстов на разных языках в базе данных

2187  1 2 3 4 5 6 все
AlexNek патриот13.11.21 22:11
AlexNek
NEW 13.11.21 22:11 
в ответ uscheswoi_82 13.11.21 21:48
Пример

немного странновато, клиент читает локальный файл.

А как записывать то? Да и еще с другого компа? И любое изменение заставляет переписывать/перечитывать весь файл полностью

#41 
uscheswoi_82 старожил13.11.21 22:22
NEW 13.11.21 22:22 
в ответ AlexNek 13.11.21 22:11, Последний раз изменено 13.11.21 22:24 (uscheswoi_82)
А как записывать то?

Пример (Backend):

using System;
using System.IO;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            File.AppendAllText("testappend.html", "Предпоследняя строчка
\n");
            File.AppendAllText("testappend.html", "Последняя строчка
\n");
        }
    }
}


немного странновато, клиент читает локальный файл.

Обращается http:///.../testappend.html и видит в браузере:

Предпоследняя строчка Последняя строчка
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#42 
AlexNek патриот13.11.21 22:38
AlexNek
NEW 13.11.21 22:38 
в ответ uscheswoi_82 13.11.21 22:22

А где же XML или Json? И что делать если два человека что то редактируют? И как изменить москва в какой-то неизвестной строке? А если весь файл в память не помещается?

#43 
BSDLamer Хвостатый Carpal Tunnel13.11.21 22:49
BSDLamer
NEW 13.11.21 22:49 
в ответ AlexNek 13.11.21 22:38

не имея полностью сформулированой задачи, все что мы тут можем делать это cargo cult software engineering

0001, 0010, 0011, 0100, 0101, вышел зайчег погулядь
#44 
  max2_2000 завсегдатай13.11.21 22:57
NEW 13.11.21 22:57 
в ответ AlexNek 13.11.21 13:02
Вариантов имплементации много, что вам больше нравится?

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

#45 
uscheswoi_82 старожил13.11.21 23:50
NEW 13.11.21 23:50 
в ответ AlexNek 13.11.21 22:38
А где же XML или Json? И что делать если два человека что то редактируют? И как изменить москва в какой-то неизвестной строке? А если весь файл в память не помещается?

Я безпонятия о чём речь честно говоря. В своём будущем проекте immobilien portal я буду использовать статические JSON и HTML.


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#46 
uscheswoi_82 старожил14.11.21 01:45
NEW 14.11.21 01:45 
в ответ uscheswoi_82 13.11.21 23:50, Последний раз изменено 14.11.21 02:17 (uscheswoi_82)

Так бы примерно бы делал бы:


using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace Backend {
    class Program {
        private static String Replace(String strTemplate, Dictionary<String, String> dicData) {
            StringBuilder stbData = new StringBuilder(strTemplate);
            foreach (KeyValuePair<String, String> item in dicData)
                stbData.Replace(item.Key, item.Value);

            return stbData.ToString(); 
        }


        private static void Generate(String strTemplateFile, String strTemplateExpose, 
            Dictionary<String, String> dicExposeItems, Dictionary<String, String> dicTemplateItems, String strOutput) {
            String strPath_expose = Directory.GetCurrentDirectory() + strTemplateExpose;
            String strPath_template = Directory.GetCurrentDirectory() + strTemplateFile;
            String strPath_output_html = Directory.GetCurrentDirectory() + strOutput;
            String strBuffer = File.ReadAllText(strPath_expose, Encoding.UTF8);
            String strBuffer2 = File.ReadAllText(strPath_template, Encoding.UTF8);
            dicTemplateItems.Remove("{content}");
            dicTemplateItems.Add("{content}", Replace(strBuffer, dicExposeItems));


            File.WriteAllText(strPath_output_html, Replace(strBuffer2, dicTemplateItems),
            Encoding.UTF8);
        }


        static void Main(string[] args) {
            String strLang = "en-us";
            String strNow = DateTime.Now.ToString();


            Dictionary<String, String> dicExposeItems = new Dictionary<string, string>();
            dicExposeItems.Add("{InseratID}", "1");
            dicExposeItems.Add("{CreateDate}", strNow);
            dicExposeItems.Add("{Title}", "House, 3 rooms");
            dicExposeItems.Add("{CntRooms}", "3");
            dicExposeItems.Add("{Description}", "House, 3 rooms");
            dicExposeItems.Add("{Square}", "70");


            Dictionary<String, String> dicTemplateItems = new Dictionary<string, string>();
            dicTemplateItems.Add("{lang}", "en");
            dicTemplateItems.Add("{title}", "House, 3 rooms");
            Generate(String.Format(@"\template.{0}.xml", strLang), String.Format(@"\expose.{0}.xml", strLang), 
            dicExposeItems, dicTemplateItems, String.Format(@"\demo.{0}.html", strLang));


            strLang = "ru-ru";
            dicTemplateItems.Remove("{lang}");
            dicTemplateItems.Add("{lang}", strLang.Substring(0, 2));
            Generate(String.Format(@"\template.{0}.xml", strLang), String.Format(@"\expose.{0}.xml", strLang), 
            dicExposeItems, dicTemplateItems, String.Format(@"\demo.{0}.html", strLang));


            strLang = "de-de";
            dicTemplateItems.Remove("{lang}");
            dicTemplateItems.Add("{lang}", strLang.Substring(0, 2));
            Generate(String.Format(@"\template.{0}.xml", strLang), String.Format(@"\expose.{0}.xml", strLang), 
            dicExposeItems, dicTemplateItems, String.Format(@"\demo.{0}.html", strLang));
        }
    }
}


Результат см.:https://i.ibb.co/Z1stvX4/r-min.jpg

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#47 
Murr патриот14.11.21 01:48
Murr
NEW 14.11.21 01:48 
в ответ AlexNek 13.11.21 16:05

Куда?

------

Да туда же - в таблицу - языковый ключ же .в наличии.

Ну или извратный вариант - делаешь базы по количеству языков.


Каким образом из данных в базе получать постоянно длл-ки?

-----

ВСе, больше не наливаем... смущ

#48 
Murr патриот14.11.21 01:52
Murr
NEW 14.11.21 01:52 
в ответ AlexNek 13.11.21 16:43

не думаю что гугл переводчик будет справляться

------

КЕШИРуй в своей базе.

ТОЛьКО не забудь глюки транслятора фихать...

#49 
Murr патриот14.11.21 02:03
Murr
NEW 14.11.21 02:03 
в ответ AlexNek 13.11.21 19:54

Я так понимаю некий глобальный ресурс?

-----

Да нет - чисто твой выбор способа хранения.


А как потом редактировать запись в таблице

------

А это тебя сейчас не должно волновать...

Ввел на одном - получил перевод на каждый из заданых языков - пихнул в хранилище...

И это... в базах таблицы бывают и без первичных ключей, и со множествеными полями в качестве уникального ключа...

#50 
alex445 старожил14.11.21 08:46
NEW 14.11.21 08:46 
в ответ uscheswoi_82 13.11.21 21:48
demo.json:

С таким же успехом можно и в ресурсах проекта хранить, типа ResourceDictionary в Дотнете. Или вам нужно обязательно ещё сериализовать и передать по сети?

#51 
alex445 старожил14.11.21 08:47
NEW 14.11.21 08:47 
в ответ AlexNek 13.11.21 22:38
А где же XML или Json? И что делать если два человека что то редактируют? И как изменить москва в какой-то неизвестной строке? А если весь файл в память не помещается?

Семь бед - БД ответ.

#52 
alex445 старожил14.11.21 10:31
NEW 14.11.21 10:31 
в ответ uscheswoi_82 13.11.21 23:50

Извините за вопрос не по теме. Вы обычно сами систему авторизации пользователей (хранение и смена паролей, длину сессий и прочее) разрабатываете, или какие-то готовые модули используете? Деплоите сами, с настройкой сертификатов шифрования и вообще веб-сервера, или тоже что-то готовое используете?

#53 
uscheswoi_82 старожил14.11.21 14:04
NEW 14.11.21 14:04 
в ответ alex445 14.11.21 10:31

И сам делал, и пытался готовую систему авторизации использовать -допустим как во фреймворке Kohana. Сам каптчу делал.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#54 
schizo коренной житель14.11.21 14:14
schizo
NEW 14.11.21 14:14 
в ответ AlexNek 13.11.21 13:02

https://medium.com/walkin/database-internationalization-i1...


например. текст - это ещё небольшая проблема

Храни Вас Г-дь!
#55 
virtax старожил14.11.21 14:41
virtax
NEW 14.11.21 14:41 
в ответ AlexNek 13.11.21 13:02

Загнать все тексты и переводы в уникодный txt, сделать zip/7z и в программе просто считывать из архивного файла нужный текст по связке id-страна & id-(текстовое поле).

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

Можно даже маленькую программку для управления такой базой "на коленке" написать.

#56 
alex445 старожил14.11.21 15:16
NEW 14.11.21 15:16 
в ответ schizo 14.11.21 14:14, Последний раз изменено 14.11.21 15:17 (alex445)
https://medium.com/walkin/database-internationalization-i1...


например. текст - это ещё небольшая проблема

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


А даты и прочее обычно форматируются из коробки (в правильном фреймворке) по выбранной культуре.

#57 
  max2_2000 завсегдатай14.11.21 17:35
NEW 14.11.21 17:35 
в ответ AlexNek 13.11.21 13:02, Последний раз изменено 14.11.21 18:24 (max2_2000)

а что мы вообще разрабатываем? с этого бы начать. не определившись с задачей, попытки поскорей начать "имплеменментировать" - суета-сует.

если же исходить из того, что задача полностью определена в заглавии (Сохранение текстов на разных языках в базе данных), то три таблицы напрашиваются:


create table language (id int(11) not null, language varchar(20) not null, symbol varchar(10));

create table text (id int(11) not null, text text not null);

create table translation (id int(11) not null, text_id int(11), lang_id int(11), translation text)


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

#58 
Murr патриот14.11.21 18:54
Murr
NEW 14.11.21 18:54 
в ответ max2_2000 14.11.21 17:35

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

При этом язык оригинального текста - неопределен.


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

#59 
alex445 старожил14.11.21 19:23
NEW 14.11.21 19:23 
в ответ Murr 14.11.21 18:54, Последний раз изменено 14.11.21 19:26 (alex445)

Текущая культура в Дотнете хранится в CultureInfo. Дефолтная - под которой запущено приложение. Если это сайт на сервере - культура на сервере. Надо клиентскую - спрашиваешь в браузере у клиента какая или берёшь из настроек текущей сессии клиента. Кодировки культур имеют известный формат. Из приложения получаешь кодировку и сущность, которую нужно перевести. Далее что там у нас, EntityFramework? Тогда что-то типа


Lang.LangCityTranslations.Where(t => t.LangId == ... && t.CityId == ...).FirstOrDefault()


и далее вытаскиваешь нужное для перевода свойство.

#60 
1 2 3 4 5 6 все