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

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

2187  1 2 3 4 5 6 все
  max2_2000 завсегдатай14.11.21 20:21
NEW 14.11.21 20:21 
в ответ Murr 14.11.21 18:54
По предлагаемой схеме тебе надо будет писать два разных метода получения текста - один для оригинального, другой для перевода.

нет никакого "оригинального", если вы его искусственно не создали. просто текст-ключ. например, "жопа". выдаем запрос таблице text получить id слова жопа, таблице language - запрос на id языка XY, и уже с этими двумя идями обращаемся в таблицу translate за текстом "жопа" на нужном языке.

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

что такое "оригинальный текст"?

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

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

#61 
  max2_2000 завсегдатай14.11.21 20:22
NEW 14.11.21 20:22 
в ответ alex445 14.11.21 19:23
Текущая культура в Дотнете хранится в CultureInfo.

откуда появился дотнет и прочее? кто сказал, что здесь вообще присутствует дотнет или иное? вопрос: как сохранить тексты на разных языках в базе данных. "остальное - от лукавого" (с)

#62 
Murr патриот14.11.21 22:57
Murr
NEW 14.11.21 22:57 
в ответ max2_2000 14.11.21 20:21

просто текст-ключ.

-----

Заметь - это не Я написал.

При этом Я как-то не увидел на каком языке текст...


обращаемся в таблицу translate

-----

Что именно требует обращаться в эту таблицу?

Каков будет результат для заданого исходного с языком "русский"?


что такое "оригинальный текст"?

-----

Нннннну скажем что это текст для которого нет информации об языке.


подумайте, как решить

-----

Пару варианнннтов Я когда-то делал...

#63 
alex445 старожил14.11.21 23:42
NEW 14.11.21 23:42 
в ответ max2_2000 14.11.21 20:22, Последний раз изменено 14.11.21 23:55 (alex445)

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

#64 
alex445 старожил14.11.21 23:54
NEW 14.11.21 23:54 
в ответ Murr 14.11.21 22:57, Последний раз изменено 14.11.21 23:56 (alex445)

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


Я последние свои проекты - пару сайтов и WPF-приложение - сделал все с поддержкой локализации. И сейчас игру на Юнити делаю по тому же шаблону. Только я не в БД всё запихал, а в словари ресурсов, но суть от этого не меняется.

#65 
alex445 старожил27.11.21 20:02
NEW 27.11.21 20:02 
в ответ alex445 14.11.21 23:54, Последний раз изменено 27.11.21 20:47 (alex445)

Всплыл недостаток сохранения локализованных данных в файлах resx. resx генерит в выходную директорию папки с названиями локалей и в каждой DLL с одним и тем же именем. Если я хочу импортировать эти DLL в, скажем, Юнити, то возникает ошибка - туда можно импортировать только одну DLL с тем же именем, при этом неважно, что они в разных директориях находятся. Придётся либо отказаться от хранения локалей, как это требуется для resx, либо придумать своё хранилище.


Самый простой вариант обойти это - отказаться от схемы "отдельный файл на локаль" и встроить обозначение локали в имя ресурса - типа "PersonName_en_US". А вытаскиваться ресурс через символы подстановки - типа


resourceManager.GetString($"PersonName_{locale}");


Но если ресурсы уже сохранены с прежней схемой, то куча работы по переписыванию - ручному или программному. Ну и теперь ломается схема работы с локалями самого класса ResourceManager.


Ещё как вариант - создать по сборке на каждую локаль и передавать в конструктор ResourceManager сборку текущей выбранной локали. Проблема только в том, что придётся отдельный проект для каждой такой локали делать, чтобы каждый проект свою DLL выпускал.

#66 
Murr патриот27.11.21 23:49
Murr
NEW 27.11.21 23:49 
в ответ alex445 27.11.21 20:02

Из вышенаписанного на сделать вывод, что... мыши кололись и продолжали жрать кактус...

Блин, есть СТАНДАРТНОЕ решение для локализуемых ресурсов, но ознакомится и применять мешает установка что все нужное уже изучено...спок

#67 
alex445 старожил28.11.21 01:19
NEW 28.11.21 01:19 
в ответ Murr 27.11.21 23:49

Какое стандартное?

#68 
Murr патриот28.11.21 01:42
Murr
NEW 28.11.21 01:42 
в ответ alex445 28.11.21 01:19

Читай в МСДНе.

#69 
alex445 старожил28.11.21 02:02
NEW 28.11.21 02:02 
в ответ Murr 28.11.21 01:42, Последний раз изменено 28.11.21 02:04 (alex445)

В МСДНе везде про resx файлы говорится и класс ResourceManager

Globalize and localize .NET applications | Microsoft Docs


Если есть способ заставить это всё дело сохранять локализованные ресурсы в DLL с разными названиями или в одну DLL, то для Юнити пойдёт. Нет - нужно искать другой подход. В Дотнете локализованные ресурсы сохраняются в либы с одним и тем же названием, но в разных папках.

#70 
Murr патриот28.11.21 02:14
Murr
NEW 28.11.21 02:14 
в ответ alex445 28.11.21 02:02

Указанное - менее 1% от того что надо знать по локализации.

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

#71 
alex445 старожил28.11.21 03:06
NEW 28.11.21 03:06 
в ответ Murr 28.11.21 02:14, Последний раз изменено 28.11.21 03:07 (alex445)

С одной стороны вы говорите, что нужно быстро решать задачи. С другой - на каждый вопрос предлагаете максимально глубокое и долгое изучение, вместо ответа на конкретный вопрос. Если, конечно, вы знаете ответ.


Я импортирую в Юнити ДЛЛки. Юнити пишет, что не должно быть ДЛЛек с одним именем, неважно, как они раскиданы по директориям - Юнити нашёл в разных директориях одинаковые по имени ДЛЛки и не даёт их импортировать. Всё. Диапазон решений - либо одна ДЛЛ, либо много с разными именами, либо вообще другой подход, типа текстовых файлов (txt, xml, json, etc.).

#72 
Murr патриот28.11.21 04:37
Murr
NEW 28.11.21 04:37 
в ответ alex445 28.11.21 03:06

...изучение...

-----

Для твоей же пользы - у тебя один из пробелов в навыках - работа с документацией. Просто не умеешь быстро находить нужное.

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

Ты либо научишься учится, либо будет как сейчас.


А задачи - задачи надо решать быстро.

А для возможности решать быстро - надо дохрена и больше знать.

Ну а чтобы знать - надо ... учится. Много и постоянно.

Тут - без вариантов.


Не дает их импортировать

-----

А должен?

Читай доку на предмет типов ресурсов.

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

#73 
alex445 старожил28.11.21 09:58
NEW 28.11.21 09:58 
в ответ Murr 28.11.21 04:37

Такие общие советы вообще не нужны. Делай хорошо и не делай плохо, учись и не неучись - это не советы.

#74 
alex445 старожил28.11.21 10:13
NEW 28.11.21 10:13 
в ответ alex445 28.11.21 09:58

Эй, кто мне минусы лепит? Лучше ответ дайте. ))

#75 
Murr патриот28.11.21 13:49
Murr
NEW 28.11.21 13:49 
в ответ alex445 28.11.21 09:58

...не нужны...

-----

Ну учить то Я тебя никогда не брался...

Так что либо сам научишься... либо будешь особенным...

#76 
Murr патриот28.11.21 14:03
Murr
NEW 28.11.21 14:03 
в ответ alex445 28.11.21 10:13

ответ дайте.

-----

А если не дадут то и решения не будет?

А всего-то - надо изучить организацию и использование ресурсов.


И, кстати, ресурс - американский... в основном... а для американцев не существует проблемы локализации в виду отсутствия не-американского языка... смущ

#77 
alex445 старожил28.11.21 16:37
NEW 28.11.21 16:37 
в ответ Murr 28.11.21 14:03, Последний раз изменено 28.11.21 16:47 (alex445)
А если не дадут то и решения не будет?
А всего-то - надо изучить организацию и использование ресурсов.


И, кстати, ресурс - американский... в основном... а для американцев не существует проблемы локализации в виду отсутствия не-американского языка...

Если ответа не будет, то придётся самому изучать или что-то своё лепить. Но ответ всё это дело ускорит.


Всё они локализуют. Локализации нет в игрушках в Стиме, в магазинах приложений, или в нормальных программах, типа того же Фотошопа?


Не вопрос - не будет задачи, не буду локализовать. У меня на прежних работах никто не требовал локализации - достаточно было русского. Я сам на сайте и потом в WPF себе прикрутил. А с Юнити старый простой подход по МСДНовскому букварю не сработал - нужны танцы с бубном и копошения в кишках, как там эти ресурсы хранятся-деплоятся-обрабатываются.

#78 
Murr патриот28.11.21 16:50
Murr
NEW 28.11.21 16:50 
в ответ alex445 28.11.21 16:37

достаточно было русского.

-----

А америкосам - достаточно американской версии английского.

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


Вот простой пример.

Винда 7. Обычные региональные настройки.

Мне нужны одновременно - американская клава, русская клава и... формат даты dd/mm/yyyy.


или что-то свое лепить.

-----

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

#79 
alex445 старожил28.11.21 20:42
NEW 28.11.21 20:42 
в ответ Murr 28.11.21 16:50

Прочитал тут всё

Create satellite assemblies for .NET apps | Microsoft Docs

Package and deploy resources in .NET Apps | Microsoft Docs

Resources in .NET apps | Microsoft Docs


Херня и вода - для моего вопроса ответа не дают. Единственный намёк - затолкать эти сборки-сателлиты (как раз те, что содержат сокмиленные ресурсы для локали) в глобальный кеш сборок, но там могут быть проблемы с доступом из Юнити. Да и на разных системах это в разных местах находится - Винда, Андроид и прочее. В моём случае лучше, когда всё в папке приложения лежит.


Сейчас видится такое решение - создать по проекту для каждой локали, дать сборкам разные имена (например, поместить в название имя локали), чтобы Юнити не ругался при импорте, загружать при старте приложения ту сборку, чья локаль выбрана.

#80 
1 2 3 4 5 6 все