0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 12:02:16 +02:00
This commit is contained in:
t123 2010-05-11 17:20:09 +01:00
commit 2fab7398d5
16 changed files with 683 additions and 155 deletions

View File

@ -75,17 +75,19 @@
android:summary="@string/use_ruby_support_summ"
android:key="useRubySupport" />
<ListPreference
android:title="@string/qa_font_size"
android:summary="@string/qa_font_size_summ"
android:key="qaFontSize"
android:title="@string/display_font_size"
android:summary="@string/display_font_size_summ"
android:key="displayFontSize"
android:defaultValue="0"
android:entries="@array/qaFontSizeLabels"
android:entryValues="@array/qaFontSizeVals" />
<CheckBoxPreference
android:title="@string/show_question_answer"
android:defaultValue="false"
android:summary="@string/show_question_answer_summ"
android:key="showQuestionAnswer" />
android:entries="@array/displayFontSizeLabels"
android:entryValues="@array/displayFontSizeVals" />
<ListPreference
android:title="@string/hide_question_in_answer"
android:summary="@string/hide_question_in_answer_summ"
android:key="hideQuestionInAnswer"
android:defaultValue="0"
android:entries="@array/hideQuestionInAnswerLabels"
android:entryValues="@array/hideQuestionInAnswerVals" />
</PreferenceCategory>
<!-- TODO implement this preference. Right now: always use notifications

27
res/values-it/arrays.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string-array name="newCardOrderLabels">
<item>Ordine casuale</item>
<item>Ordine di aggiunta</item>
<item>Ordine di aggiunta inverso</item>
</string-array>
<string-array name="newCardSchedulingLabels">
<item>Distribuisci sulla sequenza di ripetizione</item>
<item>Dopo le ripetizioni</item>
<item>Prima delle ripetizioni</item>
</string-array>
<string-array name="revCardOrderLabels">
<item>Inizia dalle carte con l'intervallo più lungo</item>
<item>Inizia dalle carte con l'intervallo più corto</item>
<item>In ordine di scadenza</item>
<item>In ordine casuale</item>
</string-array>
<string-array name="failedCardOptionLabels">
<item>Mostra presto le carte fallite</item>
<item>Mostra le carte fallite alla fine</item>
<item>Mostra le carte fallite tra 10 minuti</item>
<item>Mostra le carte fallite tra 8 ore</item>
<item>Mostra le carte fallite tra 3 giorni</item>
</string-array>
</resources>

71
res/values-it/strings.xml Normal file
View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string name="CardEditorCancelButton">Annulla</string>
<string name="CardEditorSaveButton">Salva</string>
<string name="app_name">Ankidroid</string>
<string name="yes"></string>
<string name="no">No</string>
<string name="deck_not_loaded">Impossibile caricare il mazzo.</string>
<string name="deck_not_loaded_detail">Premi menu e seleziona uno dei mazzi nella tua scheda SD.</string>
<string name="deck_empty">Il mazzo è vuoto.</string>
<string name="card_template">&lt;html&gt; &lt;head&gt; &lt;link rel="stylesheet" type="text/css" href="file:///android_asset/flashcard_css" /&gt; &lt;/head&gt; &lt;body&gt; &lt;span class="card"&gt; ::content:: &lt;/span&gt; &lt;/body&gt; &lt;/html&gt;</string>
<string name="deckpicker_title">Seleziona uno dei mazzi che hai copiato sulla tua scheda SD</string>
<string name="deckpicker_title_nosdcard">La scheda SD non è montata</string>
<string name="deckpicker_due">%1$d di %2$d da ripetere</string>
<string name="deckpicker_new">%d nuove oggi</string>
<string name="deckpicker_loaddeck">Caricamento mazzo...</string>
<string name="deckpicker_nodeck">Nessun mazzo trovato.</string>
<string name="notify_ticker">Aggiornamento applicazione</string>
<string name="notify_title">Ankidroid Aggiornato</string>
<string name="notify_message">Scarica una nuova versione</string>
<string name="notification_title">Conferma l'aggiornamento di Ankidroid</string>
<string name="notification_message">Una nuova versione di Ankidroid è disponibile in Android Market.\n\nVuoi installarla?</string>
<string name="notification_stop">Non informarmi più di questo aggiornamento</string>
<string name="sdcard_missing_message">La scheda SD non è disponibile, perché è usata come unità USB. Scollegare l'USB per accedere ai mazzi.</string>
<string name="newcards_day_summ">Il numero massimo di carte nuove mostrate al giorno.</string>
<string name="newcards_day">Carte nuove / Giorno</string>
<string name="session_time_limit">Tempo limite di sessione</string>
<string name="session_time_limit_summ">Durata della sessione in minuti. Scegli 0 per nessun limite.</string>
<string name="session_question_limit">Numero di domande per sessione</string>
<string name="session_question_limit_summ">Numero di domande per sessione. Scegli 0 per nessun limite.</string>
<string name="new_cards_order">Ordine nuove carte</string>
<string name="new_cards_order_summ">Ordine in cui mostrare le nuove carte.</string>
<string name="show_new_cards_in">Mostra le nuove carte in...</string>
<string name="new_card_spacing">Distanza nuove carte</string>
<string name="new_card_spacing_summ">Dove distribuire le carte nuove durante la revisione.</string>
<string name="show_new_cards">Mostra le carte nuove...</string>
<string name="review_cards_order">Ordine di ripetizione delle carte</string>
<string name="review_cards_in">Ripeti le carte in...</string>
<string name="review_cards_order_summ">Ordine in cui ripetere le carte.</string>
<string name="overlay_on">Lavagna attiva</string>
<string name="overlay_off">Lavagna disattivata</string>
<string name="show_answer">Mostra la risposta</string>
<string name="show_question">Mostra la domanda</string>
<string name="card_hint">Carta</string>
<string name="again">Ripeti</string>
<string name="hard">Difficile</string>
<string name="good">Normale</string>
<string name="easy">Facile</string>
<string name="show_whiteboard">Mostra timer / lavagna</string>
<string name="show_whiteboard_summ">Consente di scrivere sullo schermo</string>
<string name="sample_deck">Mazzo di esempio</string>
<string name="sample_deck_summ">Genera il mazzo con le capitali, se non è presente</string>
<string name="corporal_punishments">Punizioni corporali</string>
<string name="corporal_punishments_summ">Vibra in caso di errore, per insegnarti</string>
<string name="write_answers">Scrivi le risposte</string>
<string name="write_answers_summ">Consente di scrivere la risposta e confrontarla con quella corretta</string>
<string name="deck_path">Percorso del mazzo</string>
<string name="deck_path_summ">Percorso dove sono salvati i tuoi mazzi</string>
<string name="loading_new_card">Caricamento nuova carta...</string>
<string name="loading_deck">Caricamento mazzo. Attendi...</string>
<string name="preferences">Preferenze</string>
<string name="about">Informazioni</string>
<string name="study_options">Opzioni di studio</string>
<string name="suspend">Sospendi</string>
<string name="edit_card">Modifica carta</string>
<string name="switch_another_deck">Passare a un altro mazzo</string>
<string name="saving_changes">Salvataggio delle modifiche ...</string>
<string name="session_question_limit_reached">Limite di domande della sessione raggiunto</string>
<string name="session_time_limit_reached">Limite di tempo della sessione raggiunto</string>
</resources>

27
res/values-pl/arrays.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string-array name="newCardOrderLabels">
<item>Pokaż nowe karty w losowej kolejności</item>
<item>Pokaż nowe karty w kolejności dodania</item>
<item>Pokaż nowe karty w odwróconej kolejności dodania</item>
</string-array>
<string-array name="newCardSchedulingLabels">
<item>Rozprosz nowe karty między powtórkami</item>
<item>Pokaż nowe karty po wszystkich innych kartach</item>
<item>Pokaż nowe karty przed powtórką</item>
</string-array>
<string-array name="revCardOrderLabels">
<item>Zacznij od kart o największej przerwie</item>
<item>Zacznij od kart o najmniejszej przerwie</item>
<item>Przeglądaj karty w kolejnośc daty pojawienia się</item>
<item>Pokaż karty w losowej kolejności</item>
</string-array>
<string-array name="failedCardOptionLabels">
<item>Pokaż wkrótce źle rozwiązane karty</item>
<item>Pokaż źle rozwiązane karty na końcu</item>
<item>Pokaż źle rozwiązane karty za 10 minut</item>
<item>Pokaż źle rozwiązane karty za 8 godzin</item>
<item>Pokaż źle rozwiązane karty za 3 dni</item>
</string-array>
</resources>

71
res/values-pl/strings.xml Normal file
View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string name="CardEditorCancelButton">Anuluj</string>
<string name="CardEditorSaveButton">Zapisz</string>
<string name="app_name">Ankidroid</string>
<string name="yes">Tak</string>
<string name="no">Nie</string>
<string name="deck_not_loaded">Nie udało się załadować talii.</string>
<string name="deck_not_loaded_detail">Proszę naciśnij menu i wybierz jedną z talii, przechowywaną na Twojej kartcie SD.</string>
<string name="deck_empty">Talia jest pusta.</string>
<string name="card_template">&lt;html&gt;&lt;head&gt;&lt;link rel="stylesheet" type="text/css" href="file:///android_asset/flashcard_css" /&gt;&lt;/head&gt;&lt;body&gt; &lt;span class="card"&gt;::Zawartość::&lt;/span&gt; &lt;/body&gt;&lt;/html&gt;</string>
<string name="deckpicker_title">Wybierz talię skopiowaną na Twoją kartę SD</string>
<string name="deckpicker_title_nosdcard">Karta SD jest niezainstalowana</string>
<string name="deckpicker_due">%1$d z %2$d zaległych</string>
<string name="deckpicker_new">%d nowe dzisiaj</string>
<string name="deckpicker_loaddeck">Ładowanie talii...</string>
<string name="deckpicker_nodeck">Nie znaleziono talii.</string>
<string name="notify_ticker">Aktualizacja aplikacji</string>
<string name="notify_title">Ankidroid zaktualizowany</string>
<string name="notify_message">Pobierz nową wersję</string>
<string name="notification_title">Potwierdź aktualizację Ankidroid</string>
<string name="notification_message">Nowa wersja Ankidroid jest dostępna w Android Market.\n\n Czy chcesz ją zainstalować?</string>
<string name="notification_stop">Nie informuj mnie ponownie o tej aktualizacji</string>
<string name="sdcard_missing_message">Karta SD jest niedostępna, ponieważ jest ona używana jako pamięć masowa USB. Odłącz USB, aby uzyskać dostęp do Twoich talii.</string>
<string name="newcards_day_summ">Maksymalna dzienna liczba nowych kart.</string>
<string name="newcards_day">Nowe karty / Dzień</string>
<string name="session_time_limit">Limit czasu sesji</string>
<string name="session_time_limit_summ">Liczba minut w sesji. Wybierz 0 dla braku limitu.</string>
<string name="session_question_limit">Limit pytań w sesji</string>
<string name="session_question_limit_summ">Liczba pytań w sesji. Wybierz 0 dla braku limitu.</string>
<string name="new_cards_order">Kolejność nowych kart</string>
<string name="new_cards_order_summ">Kolejność, w której mają być wyświetlane nowe karty.</string>
<string name="show_new_cards_in">Pokaż nowe karty w. ..</string>
<string name="new_card_spacing">Przerwa w nowych kartach</string>
<string name="new_card_spacing_summ">Gdzie rozłożyć nowe karty podczas przeglądu.</string>
<string name="show_new_cards">Pokaż nowe karty ...</string>
<string name="review_cards_order">Kolejność przeglądania kart</string>
<string name="review_cards_in">Przeglądanie kart w...</string>
<string name="review_cards_order_summ">Kolejność, w której mają być wyświetlane przeglądane karty.</string>
<string name="overlay_on">Tablica włączona</string>
<string name="overlay_off">Tablica wyłączona</string>
<string name="show_answer">Pokaż Odpowiedź</string>
<string name="show_question">Pokaż Pytanie</string>
<string name="card_hint">Karta</string>
<string name="again">Ponownie</string>
<string name="hard">Trudna</string>
<string name="good">Dobra</string>
<string name="easy">Łatwa</string>
<string name="show_whiteboard">Pokaż zegar / tablicę</string>
<string name="show_whiteboard_summ">Umożliwia pisanie na ekranie</string>
<string name="sample_deck">Przykładowa talia</string>
<string name="sample_deck_summ">Generowanie głównej talii jeśli inna nie została znaleziona</string>
<string name="corporal_punishments">Kara cielesna</string>
<string name="corporal_punishments_summ">Wibracja podczas błędu, to Cię nauczy</string>
<string name="write_answers">Napisz odpowiedzi</string>
<string name="write_answers_summ">Pozwala napisać odpowiedź i porównać ją z właściwą</string>
<string name="deck_path">Ścieżka talii</string>
<string name="deck_path_summ">Ścieżka do miejsca w której Twoje talie są przechowywane</string>
<string name="loading_new_card">Ładowanie nowej karty ...</string>
<string name="loading_deck">Ładowanie talii. Proszę czekać...</string>
<string name="preferences">Preferencje</string>
<string name="about">O programie</string>
<string name="study_options">Opcje nauki</string>
<string name="suspend">Zawieś</string>
<string name="edit_card">Edytuj kartę</string>
<string name="switch_another_deck">Przełącz się do innej talii</string>
<string name="saving_changes">Trwa zapisywanie zmian...</string>
<string name="session_question_limit_reached">Osiągnięto limit pytań w sesji</string>
<string name="session_time_limit_reached">Osiągnięto limit czasu w sesji</string>
</resources>

27
res/values-ru/arrays.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string-array name="newCardOrderLabels">
<item>Случайно</item>
<item>Порядок добавлен</item>
<item>Обратный порядок добавлен</item>
</string-array>
<string-array name="newCardSchedulingLabels">
<item>Распространение через отзовы</item>
<item>После отзывов</item>
<item>Перед отзывами</item>
</string-array>
<string-array name="revCardOrderLabels">
<item>Большый интервал первым</item>
<item>Наименьший интервал первым</item>
<item>Соответствующий порядок</item>
<item>В случайном порядке</item>
</string-array>
<string-array name="failedCardOptionLabels">
<item>Показывать неудачные карточки скоро</item>
<item>Показывать неудачные карточки а конце</item>
<item>Показывать неудачные карточки через 10 минут</item>
<item>Показывать неудачные карточки через 8 часов</item>
<item>Показывать неудачные карточки через 3 дня</item>
</string-array>
</resources>

71
res/values-ru/strings.xml Normal file
View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string name="CardEditorCancelButton">Отмена</string>
<string name="CardEditorSaveButton">Сохранить</string>
<string name="app_name">Ankidroid</string>
<string name="yes">Да</string>
<string name="no">Нет</string>
<string name="deck_not_loaded">Не удалось загрузить рабочую панель.</string>
<string name="deck_not_loaded_detail">Пожалуйста, меню нажмите и выберите один из панели, хранящихся в Вашей SD карте.</string>
<string name="deck_empty">Рабочая панель пуста.</string>
<string name="card_template">&lt;html&gt; &lt;head&gt; &lt;link rel="stylesheet" type="text/css" href="file:///android_asset/flashcard_css" /&gt; &lt;/head&gt; &lt;body&gt; &lt;span class="card"&gt; ::content:: &lt;/span&gt; &lt;/body&gt; &lt;/html&gt;</string>
<string name="deckpicker_title">Выберите рабочую панель которую вы скопировали на SD карту</string>
<string name="deckpicker_title_nosdcard">SD карта размонтирована</string>
<string name="deckpicker_due">%1$d of %2$d к получению</string>
<string name="deckpicker_new">%d новых сегодня</string>
<string name="deckpicker_loaddeck">Загрузка рабочей панели ...</string>
<string name="deckpicker_nodeck">Не найдено ни одной рабочей панели.</string>
<string name="notify_ticker">Обновление приложения</string>
<string name="notify_title">Ankidroid обновлен</string>
<string name="notify_message">Скачать новую версию</string>
<string name="notification_title">Подтвердить обновление Ankidroid</string>
<string name="notification_message">Новая версия Ankidroid доступна в Android Market. \n\nВы хотите его установить?</string>
<string name="notification_stop">Не уведомлять меня об этом обновлении снова</string>
<string name="sdcard_missing_message">SD-карта отсутствует, поскольку он используется в качестве хранилища USB. Отключите USB для доступа к рабочей панели.</string>
<string name="newcards_day_summ">Максимальное количество новых карт, показано в день.</string>
<string name="newcards_day">Новых карт в день</string>
<string name="session_time_limit">Срок сеанса</string>
<string name="session_time_limit_summ">Количество минут в сеансе. Выберите 0 для омены граничения.</string>
<string name="session_question_limit">Лимит вопросов в сеансе</string>
<string name="session_question_limit_summ">Количество вопросов в сеансе. Выберите 0 для отмены ограничения.</string>
<string name="new_cards_order">Новый порядок карт</string>
<string name="new_cards_order_summ">Порядок, в котором показать новые карты.</string>
<string name="show_new_cards_in">Показать новые карты в...</string>
<string name="new_card_spacing">Интервал новых карт</string>
<string name="new_card_spacing_summ">Где можно распространять новые карты в ходе рассмотрения.</string>
<string name="show_new_cards">Показать новые карты ...</string>
<string name="review_cards_order">Порядок обзора карточек</string>
<string name="review_cards_in">Обзор карточек в...</string>
<string name="review_cards_order_summ">Порядок, в котором показать обзор карточек.</string>
<string name="overlay_on">Доска включена</string>
<string name="overlay_off">Доска отключена</string>
<string name="show_answer">Показать ответ</string>
<string name="show_question">Показать Вопрос</string>
<string name="card_hint">Флеш-Карта</string>
<string name="again">Снова</string>
<string name="hard">Сложно</string>
<string name="good">Хорошо</string>
<string name="easy">Легко</string>
<string name="show_whiteboard">Показать таймер / доска</string>
<string name="show_whiteboard_summ">Позволяет писать на экране</string>
<string name="sample_deck">Пример рабочей панели</string>
<string name="sample_deck_summ">Генерировать главние рабочие панели, если нечего не найдено</string>
<string name="corporal_punishments">Экзекуция</string>
<string name="corporal_punishments_summ">Вибрировать при ошибке, что научит Вас</string>
<string name="write_answers">Писать ответы</string>
<string name="write_answers_summ">Позволяет вам написать ответ и сравнивать с правильными</string>
<string name="deck_path">Путь рабочей панели</string>
<string name="deck_path_summ">Путь к где хранятся ваши рабочие панели</string>
<string name="loading_new_card">Загрузка новой карты...</string>
<string name="loading_deck">Загрузка рабочей панели. Подождите...</string>
<string name="preferences">Настройки</string>
<string name="about">О программе</string>
<string name="study_options">Функции Исследования</string>
<string name="suspend">Приостановить</string>
<string name="edit_card">Редактировать карты</string>
<string name="switch_another_deck">Переключиться на другую рабочую панель</string>
<string name="saving_changes">Сохранение изменений...</string>
<string name="session_question_limit_reached">Достигнут лимит сеанса вопросов</string>
<string name="session_time_limit_reached">Достигнут лимит сеанса</string>
</resources>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string-array name="newCardOrderLabels">
<item>随机顺序</item>
<item>添加的顺序</item>
<item>添加顺序反过来</item>
</string-array>
<string-array name="newCardSchedulingLabels">
<item>穿插在复习中</item>
<item>复习之后</item>
<item>复习之前</item>
</string-array>
<string-array name="revCardOrderLabels">
<item>间隔最久的先</item>
<item>间隔最短的先</item>
<item>照排列顺序来</item>
<item>随机顺序</item>
</string-array>
<string-array name="failedCardOptionLabels">
<item>马上就复习忘记的卡片</item>
<item>退出时复习忘记的卡片</item>
<item>10分锺内复习忘记的卡片</item>
<item>8小时内复习忘记的卡片</item>
<item>3天内复习忘记的卡片</item>
</string-array>
</resources>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string name="CardEditorCancelButton">取消</string>
<string name="CardEditorSaveButton">保存</string>
<string name="app_name">Ankidroid</string>
<string name="yes"></string>
<string name="no"></string>
<string name="deck_not_loaded">加载牌组失败。</string>
<string name="deck_not_loaded_detail">请按Menu键并选择SD卡中的牌组。</string>
<string name="deck_empty">牌组中没有卡片。</string>
<string name="card_template">&lt;html&gt; &lt;head&gt; &lt;link rel="stylesheet" type="text/css" href="file:///android_asset/flashcard_css" /&gt; &lt;/head&gt; &lt;body&gt; &lt;span class="card"&gt; ::content:: &lt;/span&gt; &lt;/body&gt; &lt;/html&gt;</string>
<string name="deckpicker_title">选择你存在SD卡中的牌组</string>
<string name="deckpicker_title_nosdcard">SD卡已拔除</string>
<string name="deckpicker_due">%2$d张中的%1$d张待复习</string>
<string name="deckpicker_new">今天有%d张新卡片</string>
<string name="deckpicker_loaddeck">正在读取牌组…</string>
<string name="deckpicker_nodeck">找不到牌组。</string>
<string name="notify_ticker">程序升级</string>
<string name="notify_title">Ankidroid 升级成功</string>
<string name="notify_message">下载新版本</string>
<string name="notification_title">确认升级 Ankidroid</string>
<string name="notification_message">Market 中有更新版本的 Ankidroid。您要安装吗</string>
<string name="notification_stop">不再提示更新</string>
<string name="sdcard_missing_message">SD卡当前正作为USB存储设备因此无法使用。拔掉USB之后即可使用。</string>
<string name="newcards_day_summ">一天最多显示几张新卡片</string>
<string name="newcards_day">新卡片数</string>
<string name="session_time_limit">回合时间限制</string>
<string name="session_time_limit_summ">一回合复习最多几分钟。如果不想限制请设置0。</string>
<string name="session_question_limit">回合题数限制</string>
<string name="session_question_limit_summ">一回合复习最多几题。如果不想限制请设置0。</string>
<string name="new_cards_order">新卡片顺序</string>
<string name="new_cards_order_summ">有新卡片时出现的顺序。</string>
<string name="show_new_cards_in">有新卡片的时候…</string>
<string name="new_card_spacing">新卡片间隔</string>
<string name="new_card_spacing_summ">复习时要如何安排新卡片。</string>
<string name="show_new_cards">有新卡片的时候…</string>
<string name="review_cards_order">复习卡片顺序</string>
<string name="review_cards_in">把复习卡片排列成…</string>
<string name="review_cards_order_summ">已经看过的复习卡片出现的顺序。</string>
<string name="overlay_on">打开白板</string>
<string name="overlay_off">关闭白板</string>
<string name="show_answer">显示答案</string>
<string name="show_question">显示问题</string>
<string name="card_hint">卡片</string>
<string name="again">再来</string>
<string name="hard">困难</string>
<string name="good">一般</string>
<string name="easy">简单</string>
<string name="show_whiteboard">显示定时器/白板</string>
<string name="show_whiteboard_summ">让你可以在屏幕上画画</string>
<string name="sample_deck">牌组例子</string>
<string name="sample_deck_summ">如果找不到任何牌组,就生成国家首都的牌组例子</string>
<string name="corporal_punishments">体罚</string>
<string name="corporal_punishments_summ">答错的时候以振动来惩罚你</string>
<string name="write_answers">填写答案</string>
<string name="write_answers_summ">让你可以填写答案,和正确答案比对</string>
<string name="deck_path">牌组路径</string>
<string name="deck_path_summ">设置保存牌组的目录</string>
<string name="loading_new_card">正在加载新卡片…</string>
<string name="loading_deck">正在加载牌组。请稍等…</string>
<string name="preferences">偏好设置</string>
<string name="about">关于</string>
<string name="study_options">复习选项</string>
<string name="suspend">暂停</string>
<string name="edit_card">编辑卡片</string>
<string name="switch_another_deck">更换牌组</string>
<string name="saving_changes">正在保存设置…</string>
<string name="session_question_limit_reached">超过回合限制题数</string>
<string name="session_time_limit_reached">超过回合限制时间</string>
</resources>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string-array name="newCardOrderLabels">
<item>隨機順序</item>
<item>新增的順序</item>
<item>新增順序反過來</item>
</string-array>
<string-array name="newCardSchedulingLabels">
<item>穿插在複習中</item>
<item>複習之後</item>
<item>複習之前</item>
</string-array>
<string-array name="revCardOrderLabels">
<item>間隔最久的先</item>
<item>間隔最短的先</item>
<item>照排列順序來</item>
<item>隨機順序</item>
</string-array>
<string-array name="failedCardOptionLabels">
<item>馬上再複習忘記的卡片</item>
<item>結束時複習忘記的卡片</item>
<item>10分鐘內複習忘記的卡片</item>
<item>8小時內複習忘記的卡片</item>
<item>3天內複習忘記的卡片</item>
</string-array>
</resources>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated with crowdin.net-->
<resources>
<string name="CardEditorCancelButton">取消</string>
<string name="CardEditorSaveButton">儲存</string>
<string name="app_name">Ankidroid</string>
<string name="yes"></string>
<string name="no"></string>
<string name="deck_not_loaded">載入牌組失敗。</string>
<string name="deck_not_loaded_detail">請按Menu鍵並選取SD卡中的牌組。</string>
<string name="deck_empty">牌組中沒有卡片。</string>
<string name="card_template">&lt;html&gt; &lt;head&gt; &lt;link rel="stylesheet" type="text/css" href="file:///android_asset/flashcard_css" /&gt; &lt;/head&gt; &lt;body&gt; &lt;span class="card"&gt; ::content:: &lt;/span&gt; &lt;/body&gt; &lt;/html&gt;</string>
<string name="deckpicker_title">選取你存在SD卡中的牌組</string>
<string name="deckpicker_title_nosdcard">SD卡已卸載</string>
<string name="deckpicker_due">%2$d張中的%1$d張待複習</string>
<string name="deckpicker_new">今天有%d張新卡片</string>
<string name="deckpicker_loaddeck">正在讀取牌組…</string>
<string name="deckpicker_nodeck">找不到牌組。</string>
<string name="notify_ticker">更新程式</string>
<string name="notify_title">Ankidroid 更新成功</string>
<string name="notify_message">下載新版本</string>
<string name="notification_title">確認更新 Ankidroid</string>
<string name="notification_message">Market 中有更新版本的 Ankidroid。您要安裝嗎</string>
<string name="notification_stop">不要再提醒我更新</string>
<string name="sdcard_missing_message">SD記憶卡目前正在當隨身碟存取中因此無法使用。拔除USB之後即可使用。</string>
<string name="newcards_day_summ">一天最多顯示幾張新卡片</string>
<string name="newcards_day">新卡片數</string>
<string name="session_time_limit">回合時間限制</string>
<string name="session_time_limit_summ">一回合複習最多幾分鐘。如果不想限制請設定0。</string>
<string name="session_question_limit">回合題數限制</string>
<string name="session_question_limit_summ">一回合複習最多幾題。如果不想限制請設定0。</string>
<string name="new_cards_order">新卡片順序</string>
<string name="new_cards_order_summ">有新卡片時出現的順序。</string>
<string name="show_new_cards_in">有新卡片的時候…</string>
<string name="new_card_spacing">新卡片間隔</string>
<string name="new_card_spacing_summ">複習時要如何安排新卡片。</string>
<string name="show_new_cards">有新卡片的時候…</string>
<string name="review_cards_order">複習卡片順序</string>
<string name="review_cards_in">把複習卡片排列成…</string>
<string name="review_cards_order_summ">已經看過的複習卡片出現的順序。</string>
<string name="overlay_on">開啟白板</string>
<string name="overlay_off">關閉白板</string>
<string name="show_answer">看答案</string>
<string name="show_question">看問題</string>
<string name="card_hint">卡片</string>
<string name="again">再來</string>
<string name="hard">困難</string>
<string name="good">可以</string>
<string name="easy">簡單</string>
<string name="show_whiteboard">計時器/白板</string>
<string name="show_whiteboard_summ">讓你可以在螢幕上畫畫</string>
<string name="sample_deck">範例牌組</string>
<string name="sample_deck_summ">如果找不到任何牌組,就產生國家首都的範例牌組</string>
<string name="corporal_punishments">體罰</string>
<string name="corporal_punishments_summ">答錯的時候振動處罰你</string>
<string name="write_answers">填寫答案</string>
<string name="write_answers_summ">讓你可以填寫答案,和正確答案比對</string>
<string name="deck_path">牌組路徑</string>
<string name="deck_path_summ">設定儲存牌組的目錄</string>
<string name="loading_new_card">正在載入新卡片…</string>
<string name="loading_deck">正在載入牌組。請稍等…</string>
<string name="preferences">偏好設定</string>
<string name="about">關於</string>
<string name="study_options">複習選項</string>
<string name="suspend">暫停</string>
<string name="edit_card">編輯卡片</string>
<string name="switch_another_deck">更換牌組</string>
<string name="saving_changes">正在儲存設定…</string>
<string name="session_question_limit_reached">超過回合限制題數</string>
<string name="session_time_limit_reached">超過回合限制時間</string>
</resources>

View File

@ -68,36 +68,49 @@
<item>4</item>
</string-array>
<!-- The values below match MIN_QA_FONT_SIZE and MAX_QA_FONT_SIZE in AnkiDroid.java.
This is a convenience, not at requirement -->
<string-array name="qaFontSizeLabels">
<item>Relative</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<string-array name="displayFontSizeLabels">
<item>10 %</item>
<item>20 %</item>
<item>30 %</item>
<item>40 %</item>
<item>50 %</item>
<item>60 %</item>
<item>70 %</item>
<item>80 %</item>
<item>90 %</item>
<item>100 %</item>
<item>110 %</item>
<item>120 %</item>
<item>130 %</item>
<item>140 %</item>
<item>150 %</item>
</string-array>
<string-array name="qaFontSizeVals">
<item>0</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<string-array name="displayFontSizeVals">
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<item>20</item>
<item>30</item>
<item>40</item>
<item>50</item>
<item>60</item>
<item>70</item>
<item>80</item>
<item>90</item>
<item>100</item>
<item>110</item>
<item>120</item>
<item>130</item>
<item>140</item>
<item>150</item>
</string-array>
<string-array name="hideQuestionInAnswerLabels">
<item>Hide the question in answer</item>
<item>Show the question in answer</item>
<item>As defined in CardModel</item>
</string-array>
<string-array name="hideQuestionInAnswerVals">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
</resources>

View File

@ -78,7 +78,7 @@
<string name="overlay_on">Whiteboard On</string>
<string name="overlay_off">Whiteboard Off</string>
<string name="show_answer">Show Answer</string>
<string name="show_question">Show Question</string>
<string name="show_question">Re-display Question</string>
<string name="card_hint">Flashcard</string>
<string name="again">Again</string>
<string name="hard">Hard</string>
@ -105,10 +105,10 @@
<string name="write_answers_summ">Lets you write the answer and compare it with the correct one</string>
<string name="use_ruby_support">Provide ruby annotation support</string>
<string name="use_ruby_support_summ">If the characters '[' and ']' are found, then the enclosed text is handled as a ruby annotation</string>
<string name="qa_font_size">Font size</string>
<string name="qa_font_size_summ">Default font size. Using 'Relative' changes the font dynamically based on space</string>
<string name="show_question_answer">Show question in answer</string>
<string name="show_question_answer_summ">Shows the question also when displaying the answer unless user entered answer.</string>
<string name="display_font_size">Relative display font size</string>
<string name="display_font_size_summ">The font size to use in the display relative to the definitions in the deck</string>
<string name="hide_question_in_answer">Hide question in answer?</string>
<string name="hide_question_in_answer_summ">Determines whether the question should be hidden when the answer is shown.</string>
<string name="deck_path">Deck path</string>
<string name="deck_path_summ">Path to where the your decks are stored</string>
@ -151,8 +151,9 @@ Flashcards for Android&lt;/h2&gt;
&lt;p&gt;AnkiDroid can read .anki files produced by the desktop &lt;a href=&quot;http://ichi2.net/anki&quot;&gt;Anki&lt;/a&gt; software.&lt;/p&gt;
&lt;p&gt;To help us make AnkiDroid better, please report any bug &lt;a href=&quot;http://code.google.com/p/ankidroid/issues&quot;&gt;here&lt;/a&gt;, new feature ideas are very welcome too!
Please use the &lt;a href=&quot;http://ichi2.net/anki/wiki/AndroidAnki&quot;&gt;wiki&lt;/a&gt; and say Hi on the &lt;a href=&quot;http://groups.google.com/group/anki-android&quot;&gt;forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;AnkiDroid is &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_source_software&quot;&gt;open source software&lt;/a&gt;, so everyone is encouraged to &lt;a href=&quot;http://ichi2.net/anki/wiki/ContributeToAnkiDroid&quot;&gt;develop it&lt;/a&gt; :-)
&lt;p&gt;AnkiDroid is &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_source_software&quot;&gt;open source software&lt;/a&gt;, so everyone is encouraged to &lt;a href=&quot;http://ichi2.net/anki/wiki/ContributeToAnkiDroid&quot;&gt;join&lt;/a&gt; the &lt;a href=&quot;http://ichi2.net/anki/wiki/AnkiDroidContributors&quot;&gt;contributors&lt;/a&gt; :-)
Non-developers can also help, for instance by updating the wiki and screenshots, &lt;a href=&quot;http://ichi2.net/anki/donate.html&quot;&gt;donating&lt;/a&gt; to Anki, or blogging about AnkiDroid!&lt;/p&gt;
&lt;p&gt;AnkiDroid is released under the &lt;a href=&quot;http://www.gnu.org/licenses/gpl.html&quot;&gt;GNU-GPL v3 license&lt;/a&gt; and the source code is available &lt;a href=&quot;http://github.com/nicolas-raoul/Anki-Android&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</string>
<string name="review_early">Review Early</string>

View File

@ -79,14 +79,14 @@ public class AnkiDroid extends Activity
*/
private static final String TAG = "AnkiDroid";
/** Max size of the font of the questions and answers for relative calculation */
protected static final int MAX_QA_FONT_SIZE = 14;
/** Max size of the font for dynamic calculation of font size */
protected static final int MAX_DYNAMIC_FONT_SIZE = 14;
/** Min size of the font of the questions and answers for relative calculation */
protected static final int MIN_QA_FONT_SIZE = 3;
/** Min size of the font for dynamic calculation of font size */
protected static final int MIN_DYNAMIC_FONT_SIZE = 3;
/** The font size specified in shared preferences. If 0 then font is calculated with MAX/MIN_FONT_SIZE */
private int qaFontSize = 0;
/** The percentage of the absolute font size specified in the deck. */
private int displayFontSize = 100;
/**
* Menus
@ -169,8 +169,14 @@ public class AnkiDroid extends Activity
/** Preference: parse for ruby annotations */
private boolean useRubySupport;
/** Preference: show the question when showing the answer */
private boolean showQuestionAnswer;
/** Preference: hide the question when showing the answer */
private int hideQuestionInAnswer;
private static final int HQIA_DO_HIDE = 0;
private static final int HQIA_DO_SHOW = 1;
private static final int HQIA_CARD_MODEL = 2;
private boolean updateNotifications; // TODO use Veecheck only if this is true
@ -699,15 +705,14 @@ public class AnkiDroid extends Activity
showOrHideControls();
showOrHideAnswerField();
}
} else if (requestCode == EDIT_CURRENT_CARD)
{
DeckTask.launchDeckTask(
DeckTask.TASK_TYPE_UPDATE_FACT,
mUpdateCardHandler,
new DeckTask.TaskData(0, AnkiDroidApp.getDeck(), currentCard));
//TODO: code to save the changes made to the current card.
} else if (requestCode == EDIT_CURRENT_CARD) {
if (CardEditor.SAVE_CARD == resultCode) {
DeckTask.launchDeckTask(DeckTask.TASK_TYPE_UPDATE_FACT,
mUpdateCardHandler, new DeckTask.TaskData(0, AnkiDroidApp
.getDeck(), currentCard));
mFlipCard.setChecked(true);
displayCardQuestion();
}
} else if(requestCode == GET_SHARED_DECK)
{
//Clean the previous card before showing the first of the new loaded deck (so the transition is not so abrupt)
@ -869,9 +874,15 @@ public class AnkiDroid extends Activity
mAnswerField.setVisibility(View.VISIBLE);
}
mFlipCard.setVisibility(View.VISIBLE);
mFlipCard.requestFocus();
updateCard(enrichWithQASpan(currentCard.question, false));
String displayString = enrichWithQASpan(currentCard.question, false);
//Depending on preferences do or do not show the question
if (calculateShowQuestion()) {
displayString = displayString + "<hr/>";
}
updateCard(displayString);
}
}
@ -893,6 +904,8 @@ public class AnkiDroid extends Activity
mAnswerField.setVisibility(View.GONE);
mEase2.requestFocus();
String displayString = "";
// If the user wrote an answer
if(writeAnswers)
@ -907,27 +920,40 @@ public class AnkiDroid extends Activity
// Obtain the diff and send it to updateCard
DiffEngine diff = new DiffEngine();
updateCard(enrichWithQASpan(diff.diff_prettyHtml(
displayString = enrichWithQASpan(diff.diff_prettyHtml(
diff.diff_main(userAnswer, correctAnswer)) +
"<br/>" + currentCard.answer, true));
"<br/>" + currentCard.answer, true);
}
else
{
updateCard("");
displayString = "";
}
}
else
{
if (true == showQuestionAnswer) {
displayString = enrichWithQASpan(currentCard.answer, true);
}
//Depending on preferences do or do not show the question
if (calculateShowQuestion()) {
StringBuffer sb = new StringBuffer();
sb.append(enrichWithQASpan(currentCard.question, false));
sb.append("<hr/>");
sb.append(enrichWithQASpan(currentCard.answer, true));
updateCard(sb.toString());
} else {
updateCard(enrichWithQASpan(currentCard.answer, true));
sb.append(displayString);
displayString = sb.toString();
mFlipCard.setVisibility(View.GONE);
}
updateCard(displayString);
}
private final boolean calculateShowQuestion() {
if (HQIA_DO_SHOW == hideQuestionInAnswer) {
return true;
}
if (HQIA_CARD_MODEL == hideQuestionInAnswer && 0 == Model.getModel(currentCard.cardModelId, false).getCardModel(currentCard.cardModelId).questionInAnswer) {
return true;
}
return false;
}
/**
@ -942,13 +968,6 @@ public class AnkiDroid extends Activity
content = Sound.extractSounds(deckFilename, content);
content = Image.loadImages(deckFilename, content);
// Calculate the size of the font if relative font size is chosen in preferences
int fontSize = qaFontSize;
if (0 == qaFontSize) {
fontSize = calculateDynamicFontSize(content);
}
mCard.getSettings().setDefaultFontSize(fontSize);
// In order to display the bold style correctly, we have to change font-weight to 700
content = content.replaceAll("font-weight:600;", "font-weight:700;");
@ -958,10 +977,11 @@ public class AnkiDroid extends Activity
}
// Add CSS for font colour and font size
if(currentCard != null)
{
if (null != currentCard) {
Model myModel = Model.getModel(currentCard.cardModelId, false);
content = myModel.getCSSForFontColorSize(currentCard.cardModelId) + content;
content = myModel.getCSSForFontColorSize(currentCard.cardModelId, displayFontSize) + content;
} else {
mCard.getSettings().setDefaultFontSize(calculateDynamicFontSize(content));
}
Log.i(TAG, "content card = \n" + content);
@ -970,26 +990,10 @@ public class AnkiDroid extends Activity
Sound.playSounds();
}
/**
* Calculates a dynamic font size depending on the length of the contents
* taking into account that the input string contains html-tags, which will not
* be displayed and therefore should not be taken into account.
* @param htmlContents
* @return font size respecting MIN_QA_FONT_SIZE and MAX_QA_FONT_SIZE
*/
protected final static int calculateDynamicFontSize(String htmlContent) {
// Replace each <br> with 15 spaces, each <hr> with 30 spaces, then remove all html tags and spaces
String realContent = htmlContent.replaceAll("\\<br.*?\\>", " ");
realContent = realContent.replaceAll("\\<hr.*?\\>", " ");
realContent = realContent.replaceAll("\\<.*?\\>", "");
realContent = realContent.replaceAll("&nbsp;", " ");
return Math.max(MIN_QA_FONT_SIZE, MAX_QA_FONT_SIZE - (int)(realContent.length()/5));
}
/** Constant for class attribute signalling answer */
/** Constant for class attribute signaling answer */
protected final static String ANSWER_CLASS = "answer";
/** Constant for class attribute signalling question */
/** Constant for class attribute signaling question */
protected final static String QUESTION_CLASS = "question";
/**
@ -1012,6 +1016,23 @@ public class AnkiDroid extends Activity
return sb.toString();
}
/**
* Calculates a dynamic font size depending on the length of the contents
* taking into account that the input string contains html-tags, which will not
* be displayed and therefore should not be taken into account.
* @param htmlContents
* @return font size respecting MIN_DYNAMIC_FONT_SIZE and MAX_DYNAMIC_FONT_SIZE
*/
protected final static int calculateDynamicFontSize(String htmlContent) {
// Replace each <br> with 15 spaces, each <hr> with 30 spaces, then remove all html tags and spaces
String realContent = htmlContent.replaceAll("\\<br.*?\\>", " ");
realContent = realContent.replaceAll("\\<hr.*?\\>", " ");
realContent = realContent.replaceAll("\\<.*?\\>", "");
realContent = realContent.replaceAll("&nbsp;", " ");
return Math.max(MIN_DYNAMIC_FONT_SIZE, MAX_DYNAMIC_FONT_SIZE - (int)(realContent.length()/5));
}
/**
* Utility method to write to a file.
*/
@ -1041,19 +1062,25 @@ public class AnkiDroid extends Activity
return true;
}
private SharedPreferences restorePreferences()
{
private SharedPreferences restorePreferences() {
SharedPreferences preferences = PrefSettings.getSharedPrefs(getBaseContext());
corporalPunishments = preferences.getBoolean("corporalPunishments", false);
timerAndWhiteboard = preferences.getBoolean("timerAndWhiteboard", true);
Log.i(TAG, "restorePreferences - timerAndWhiteboard: " + timerAndWhiteboard);
writeAnswers = preferences.getBoolean("writeAnswers", false);
useRubySupport = preferences.getBoolean("useRubySupport", false);
//A little hack to get int values from ListPreference. there should be an easier way ...
String qaFontSizeString = preferences.getString("qaFontSize", "0");
qaFontSize = Integer.parseInt(qaFontSizeString);
showQuestionAnswer = preferences.getBoolean("showQuestionAnswer", false);
displayFontSize = Integer.parseInt(preferences.getString("displayFontSize", "100"));
hideQuestionInAnswer = Integer.parseInt(preferences.getString("hideQuestionInAnswer", Integer.toString(HQIA_DO_SHOW)));
updateNotifications = preferences.getBoolean("enabled", true);
//redraw screen with new preferences
if (null != mFlipCard) {
if (mFlipCard.isChecked()) {
displayCardAnswer();
} else {
displayCardQuestion();
}
}
return preferences;
}

View File

@ -99,9 +99,10 @@ public class CardModel implements Comparator<CardModel> {
/** SELECT string with only those fields, which are used in AnkiDroid */
private final static String SELECT_STRING = "SELECT id, ordinal, modelId, name, description, active, qformat, aformat" //lformat left out
//qedformat, aedformat, questionInAnswer left out
+ ", questionFontSize, questionFontColour" //questionFontFamily, questionAlign left out
+ ", answerFontSize, answerFontColour" //same as for question
//qedformat, aedformat left out
+ ", questionInAnswer"
+ ", questionFontFamily, questionFontSize, questionFontColour" //questionAlign left out
+ ", answerFontFamily, answerFontSize, answerFontColour" //same as for question
+ ", lastFontColour" //lastFontFamily, lastFontSize left out
//rest left out
+ " FROM cardModels";
@ -134,11 +135,14 @@ public class CardModel implements Comparator<CardModel> {
myCardModel.active = cursor.getInt(5);
myCardModel.qformat = cursor.getString(6);
myCardModel.aformat = cursor.getString(7);
myCardModel.questionFontSize = cursor.getInt(8);
myCardModel.questionFontColour = cursor.getString(9);
myCardModel.answerFontSize = cursor.getInt(10);
myCardModel.answerFontColour = cursor.getString(11);
myCardModel.lastFontColour = cursor.getString(12);
myCardModel.questionInAnswer = cursor.getInt(8);
myCardModel.questionFontFamily = cursor.getString(9);
myCardModel.questionFontSize = cursor.getInt(10);
myCardModel.questionFontColour = cursor.getString(11);
myCardModel.answerFontFamily = cursor.getString(12);
myCardModel.answerFontSize = cursor.getInt(13);
myCardModel.answerFontColour = cursor.getString(14);
myCardModel.lastFontColour = cursor.getString(15);
models.put(myCardModel.id, myCardModel);
} while (cursor.moveToNext());
}

View File

@ -66,9 +66,6 @@ public class Model {
*/
private static HashMap<Long,Model> cardModelToModelMap = new HashMap<Long, Model>();
// TODO: Javadoc.
// TODO: Methods for reading/writing from/to DB.
// BEGIN SQL table entries
long id; // Primary key
long deckId; // Foreign key
@ -83,7 +80,6 @@ public class Model {
int source = 0;
// BEGIN SQL table entries
/** Map for convenience and speed which contains CardModels from current model */
private TreeMap<Long, CardModel> cardModelsMap = new TreeMap<Long, CardModel>();
@ -92,6 +88,12 @@ public class Model {
/** Map for convenience and speed which contains the CSS code related to a CardModel */
private HashMap<Long, String> cssCardModelMap = new HashMap<Long, String>();
/**
* The percentage chosen in preferences for font sizing at the time when the css for the CardModels
* related to this Model was calcualted in prepareCSSForCardModels.
*/
private transient int displayPercentage = 0;
private Model(String name) {
this.name = name;
@ -163,9 +165,6 @@ public class Model {
//load related field models
FieldModel.fromDb(modelId, currentModel.fieldModelsMap);
//prepare CSS for each card model in stead of doing it again and again
currentModel.prepareCSSForCardModels();
//make relations to maps
models.put(currentModel.id, currentModel);
CardModel myCardModel = null;
@ -221,7 +220,7 @@ public class Model {
String cssString = null;
for (Map.Entry<Long, CardModel> entry : cardModelsMap.entrySet()) {
myCardModel = entry.getValue();
cssString = createCSSForFontColorSize(myCardModel.id);
cssString = createCSSForFontColorSize(myCardModel.id, displayPercentage);
this.cssCardModelMap.put(myCardModel.id, cssString);
}
}
@ -229,45 +228,40 @@ public class Model {
/**
* Returns a cached CSS for the font color and font size of a given CardModel taking into account the included fields
* @param myCardModelId
* @param percentage the preference factor to use for calculating the display font size from the cardmodel and fontmodel font size
* @return the html contents surrounded by a css style which contains class styles for answer/question and fields
*/
protected final String getCSSForFontColorSize(long myCardModelId) {
protected final String getCSSForFontColorSize(long myCardModelId, int percentage) {
//tjek whether the percentage is this the same as last time
if (this.displayPercentage != percentage) {
this.displayPercentage = percentage;
prepareCSSForCardModels();
}
return this.cssCardModelMap.get(myCardModelId);
}
/**
* @param myCardModelId
* @param percentage the factor to apply to the font size in card model to the display size (in %)
* @return the html contents surrounded by a css style which contains class styles for answer/question and fields
*/
private final String createCSSForFontColorSize(long myCardModelId) {
private final String createCSSForFontColorSize(long myCardModelId, int percentage) {
StringBuffer sb = new StringBuffer();
sb.append("<!-- ").append(percentage).append(" % display font size-->");
sb.append("<style type=\"text/css\">\n");
CardModel myCardModel = cardModelsMap.get(myCardModelId);
int referenceFontSize = 20; //this is the default in Anki. Only used if the question font for some reason is not set
if (0 < myCardModel.questionFontSize) {
referenceFontSize = myCardModel.questionFontSize;
}
//body background
if (null != myCardModel.lastFontColour && 0 < myCardModel.lastFontColour.trim().length()) {
sb.append("body {background-color:").append(myCardModel.lastFontColour).append(";}\n");
}
//question font size and color
//question
sb.append(".").append(AnkiDroid.QUESTION_CLASS).append(" {\n");
if (null != myCardModel.questionFontColour && 0 < myCardModel.questionFontColour.trim().length()) {
sb.append("color:").append(myCardModel.questionFontColour).append(";\n");
}
sb.append("font-size:100%;\n");
sb.append(calculateDisplay(percentage, myCardModel.questionFontFamily, myCardModel.questionFontSize, myCardModel.questionFontColour));
sb.append("}\n");
//answer font size and color
//answer
sb.append(".").append(AnkiDroid.ANSWER_CLASS).append(" {\n");
if (null != myCardModel.answerFontColour && 0 < myCardModel.answerFontColour.trim().length()) {
sb.append("color:").append(myCardModel.answerFontColour).append(";\n");
}
if (0 < myCardModel.answerFontSize) {
sb.append(calculateRelativeFontSize(referenceFontSize, myCardModel.answerFontSize));
}
sb.append(calculateDisplay(percentage, myCardModel.answerFontFamily, myCardModel.answerFontSize, myCardModel.answerFontColour));
sb.append("}\n");
//css for fields. Gets css for all fields no matter whether they actually are used in a given card model
FieldModel myFieldModel = null;
@ -276,12 +270,7 @@ public class Model {
myFieldModel = entry.getValue();
hexId = "fm" + Long.toHexString(myFieldModel.id);
sb.append(".").append(hexId).append(" {\n");
if (null != myFieldModel.quizFontColour && 0 < myFieldModel.quizFontColour.trim().length()) {
sb.append("color: ").append(myFieldModel.quizFontColour).append(";\n");
}
if (0 < myFieldModel.quizFontSize) {
sb.append(calculateRelativeFontSize(referenceFontSize, myFieldModel.quizFontSize));
}
sb.append(calculateDisplay(percentage, myFieldModel.quizFontFamily, myFieldModel.quizFontSize, myFieldModel.quizFontColour));
sb.append("}\n");
}
@ -289,18 +278,20 @@ public class Model {
sb.append("</style>");
return sb.toString();
}
/**
*
* @param reference
* @param current
* @return a css entry for relative font size as a percentage of the current in relation to the reference
*/
private final static String calculateRelativeFontSize(int reference, int current) {
private final static String calculateDisplay(int percentage, String fontFamily, int fontSize, String fontColour) {
StringBuffer sb = new StringBuffer();
sb.append("font-size:");
sb.append((100 * current)/reference);
sb.append("%;\n");
if (null != fontFamily && 0 < fontFamily.trim().length()) {
sb.append("font-family:\"").append(fontFamily).append("\";\n");
}
if (null != fontColour && 0 < fontColour.trim().length()) {
sb.append("color:").append(fontColour).append(";\n");
}
if (0 < fontSize) {
sb.append("font-size:");
sb.append((percentage * fontSize)/100);
sb.append("px;\n");
}
return sb.toString();
}