Мнения: 7
Теми: 2
Член от: 2019-05
Репутация:
0
Устройства: Galaxy S8 G950F
Здравейте колеги,
от доста време мъдря един проблем и много бих се радвал ако някой може да ми помогне.
Имам примерна база данни от 100тина обекта с вид
Obj ( string, double, double, double, int)
при начално стартиране на приложението базата ми данни (SQLite) се пълни с тези обект посредством Dao.
Искам да попитам дали е възможно и ако е - как се прави, да вкарам в параметъра STRING на обектите 2 стойности от съответно 2-та ми стринг файла ( единия е със английските стрингове, другия е с българските).
Крайната ми цел е пълен превод на приложението ми, само тези стрингове от самите обекти ми останаха и не мога да го измисля.
Втория вариант е при самия гетър на на string-а на обекта да добавя един транслатор атачнат към променливата, който да проверява на какъв език е телефона и от там да превежда думата - в такъв случай базата не я докосвам. Това също не ми хрумва как може да се случи, не съм го правил досега.
Благодаря.
(Последна редакция: 2019-05-21, 16:43:41 от
WakaMakaFoo.)
Мнения: 1 570
Теми: 68
Член от: 2011-12
Репутация:
132
Това, което си му дал е основно, ако стринговете са в strings.xml, а ние не знаем къде са му всички стрингове. може да са в текстови файлове в assets. ако е така, това май няма да помогне. а и ако иска да превежда с бутон в приложението, а не според езика на устройството, това пак няма да свърши работа.
Аз искам да попитам, всички стрингове от къде ги вземаш? Ако са в текстови файлове, четеш двата файла с двата езика, вкарваш всичките им елементи в два масива и когато вкарваш в базата проверяваш езика.
Демек имаш array_bg и array_en, които са пълни с всички думи и преводите им.
И след това като пълниш базата
if (language == bg) {
stringInTheObject = array_bg[i]
} else {
stringInTheObject = array_en[i]
}
Това е най-селския начин, обяснен накратко. Ествествено си обхождаш всички елементи и един по един си добавяш елементите от езика към обектите и след това си пълниш обектите в базата. Доколкото разбирам нещо такова искаш.
Мнения: 7
Теми: 2
Член от: 2019-05
Репутация:
0
Устройства: Galaxy S8 G950F
Така, имам 2 стринг файла - единия с английски стрингове, другия с български. Проблема е, че дори не мога да сложа стринг от тези файлове като параметър на обекта, а използвам хардкоуднат стринг. Dao не иска да ми вкара обектите в базата по този начин, дава ми грешка и крашва. Та, аз сменям езика си без бутон, според това какъв е езика на телефона се използва единия или другия файл. (Strings)
Това е, когато се опитвам да добавя стринг като параметър на обекта -> понеже го има в 2 стринг файла и SQLite-а не знае какво да прави (според мен).
Иначе като говорим за селски методи, винаги мога да добавя още един параметър на обекта със хардкоудната кирилица и да вадя него със if/else за локализацията. Ще стане една свинщина защото приложението ми е над 10К реда код сумарно.
(Последна редакция: 2019-05-21, 20:18:50 от
WakaMakaFoo.)
Мнения: 1 570
Теми: 68
Член от: 2011-12
Репутация:
132
как вземаш стринга?
мисля, че трябва да е getString(R.string.something) и трябва да си работи. не виждам защо да не става.
изхода на горната функция е String формат и няма разлика дали си написал горното или си написал "something"
(Последна редакция: 2019-05-21, 20:55:55 от
yo_asakura.)
Мнения: 1 570
Теми: 68
Член от: 2011-12
Репутация:
132
Базата ще се напълни със сътвения стринг според езика на устройството. Ако по-късно се смени езика, трябва да изчистиш базата и да я напълниш наново. Другия вариант е да имаш 2 бази - по една за всеки език. Така показваш базата, според езика на устройството. И третия вариант е да си добавиш в базата още една колона от стрингове, която да ти е втория език. И всеки път когато зареждаш данните, показваш само колоната на съответния език.
Аз бих използвал втория или третия вариант. Ще си направя 2 бази и ще използвам само базата за съответния език. Или една база, която да има всички езици. И при поакзване на информацията ще проверявам езика и показвам само това, което трябва.
(Последна редакция: 2019-05-22, 17:16:58 от
yo_asakura.)
Мнения: 321
Теми: 1
Член от: 2010-05
Репутация:
34
Демек искаш да си преведеш съдържанието на приложението, а не самия интерфейс. Тогава значи отпада превода с string-en.xml string-bg.xml и т.н.
След като е твое приложението защо не си праправиш базата multilanguage
пример:
pages
id
lang
title
content
date
и след като си detect-нал езика да направиш един прост селект към базата
select * from pages where lang = '{detected_lang}' and id = '{selected_page}';
// detected_lang е езика който си взел от устройството
// selected_page активитито/фрагмента което/който си отворил