Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63ed46ccf4 | ||
|
|
236f682622 | ||
|
|
bef69b3187 | ||
|
|
235224aefd | ||
|
|
2489872589 | ||
|
|
33a9504707 | ||
|
|
0fb7bbb034 | ||
|
|
beef54941f | ||
|
|
634ff4972d | ||
|
|
52f3477e24 | ||
|
|
1086464b09 | ||
|
|
2e4267aad4 | ||
|
|
b14fe8ad03 | ||
|
|
82d6141fb2 | ||
|
|
e0e7bcc08a |
@@ -20,13 +20,53 @@ configs because some features and structures may change, please do not add this
|
||||
kind of content yet. As FlorisBoard's state progresses and its core stabilizes,
|
||||
you will be able to add keyboard layouts.
|
||||
|
||||
## Translating FlorisBoard
|
||||
|
||||
Before starting to translate, when adding a new translation please file
|
||||
an issue stating that you want to translate FlorisBoard into a language.
|
||||
Once this gets approved you can start translating. When updating an
|
||||
already existing translation file you can just send a PR directly.
|
||||
|
||||
If you are not familiar with PRs, check out this guide:
|
||||
[https://www.gun.io/blog/how-to-github-fork-branch-and-pull-request](https://www.gun.io/blog/how-to-github-fork-branch-and-pull-request)
|
||||
|
||||
Notes for tips below:
|
||||
- Replace `<language>` with the language you want to add
|
||||
- Replace `<code>` with the ISO 639-1 code of the language you want to
|
||||
add
|
||||
([List of codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes))
|
||||
|
||||
### Tips when adding a new translation
|
||||
|
||||
- To add the new translation file, navigate to `app/src/main/res/values`
|
||||
and copy the file `strings.xml` into the folder
|
||||
`app/src/main/res/values-<code>` (you have to create this folder)
|
||||
- Translate only the phrases inside the brackets, leave the name
|
||||
attribute as it is
|
||||
E.g.: `<string name="hello_string">Hello World!</string>`
|
||||
`<string name="hello_string">Ciao mondo!</string>`
|
||||
- When finished translating, commit your changes locally, as the commit
|
||||
message use `Add <language> translation`
|
||||
- Push your change(s) and create the PR. When everything checks out, it
|
||||
will get accepted.
|
||||
|
||||
### Tips when updating a translation
|
||||
- To update a translation, check the `strings.xml` in
|
||||
`app/src/main/res/values` for newly added strings and add them to the
|
||||
translation file in `app/src/main/res/values-<code>`
|
||||
- When finished translating, commit your changes locally, as the commit
|
||||
message use `Update <language> translation`
|
||||
- Push your change(s) and create the PR. When everything checks out, it
|
||||
will get accepted.
|
||||
|
||||
## Bug reporting
|
||||
|
||||
This kind of contribution is the most important, as it tells where FlorisBoard
|
||||
has flaws and thus should be imroved to maximize stability and user experience.
|
||||
To make this process as smooth as possible, please use the premade [issue
|
||||
template](.github/ISSUE_TEMPLATE/bug_report.md) for bug reporting. This makes it
|
||||
easy for us to understand what the bug is and how to solve it.
|
||||
This kind of contribution is the most important, as it tells where
|
||||
FlorisBoard has flaws and thus should be improved to maximize stability
|
||||
and user experience. To make this process as smooth as possible, please
|
||||
use the premade [issue template](.github/ISSUE_TEMPLATE/bug_report.md)
|
||||
for bug reporting. This makes it easy for us to understand what the bug
|
||||
is and how to solve it.
|
||||
|
||||
### Capturing ADB debug logs
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ android {
|
||||
applicationId "dev.patrickgold.florisboard"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 29
|
||||
versionCode 9
|
||||
versionName "0.1.0"
|
||||
versionCode 10
|
||||
versionName "0.1.1"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
"icelandic": "Icelandic (QWERTY)",
|
||||
"swiss_german": "Swiss German (QWERTZ)",
|
||||
"swiss_french": "Swiss French (QWERTZ)",
|
||||
"swiss_italian": "Swiss Italian (QWERTZ)"
|
||||
"swiss_italian": "Swiss Italian (QWERTZ)",
|
||||
"persian": "Persian"
|
||||
},
|
||||
"defaultSubtypes": [
|
||||
{
|
||||
@@ -174,6 +175,13 @@
|
||||
"preferredLayout": "icelandic",
|
||||
"isAsciiCapable": true,
|
||||
"isEmojiCapable": true
|
||||
},
|
||||
{
|
||||
"id": 800,
|
||||
"languageTag": "fa-FA",
|
||||
"preferredLayout": "persian",
|
||||
"isAsciiCapable": true,
|
||||
"isEmojiCapable": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"ض": [
|
||||
{ "code": 1777, "label": "۱" }
|
||||
],
|
||||
"ص": [
|
||||
{ "code": 1778, "label": "۲" }
|
||||
],
|
||||
"ث": [
|
||||
{ "code": 1779, "label": "۳" }
|
||||
],
|
||||
"ق": [
|
||||
{ "code": 1780, "label": "۴" }
|
||||
],
|
||||
"ف": [
|
||||
{ "code": 1781, "label": "۵" }
|
||||
],
|
||||
"غ": [
|
||||
{ "code": 1782, "label": "۶" }
|
||||
],
|
||||
"ع": [
|
||||
{ "code": 1783, "label": "۷" }
|
||||
],
|
||||
"ه": [
|
||||
{ "code": 1784, "label": "۸" }
|
||||
],
|
||||
"خ": [
|
||||
{ "code": 1785, "label": "۹" }
|
||||
],
|
||||
"ح": [
|
||||
{ "code": 1776, "label": "۰" }
|
||||
],
|
||||
"ی": [
|
||||
{ "code": 1574, "label": "ئ" },
|
||||
{ "code": 1610, "label": "ي" }
|
||||
],
|
||||
"ا": [
|
||||
{ "code": 1649, "label": "ٱ" },
|
||||
{ "code": 1569, "label": "ء" },
|
||||
{ "code": 1570, "label": "آ" },
|
||||
{ "code": 1571, "label": "أ" },
|
||||
{ "code": 1573, "label": "إ" }
|
||||
],
|
||||
"ت": [
|
||||
{ "code": 1577, "label": "ة" }
|
||||
],
|
||||
"ک": [
|
||||
{ "code": 1603, "label": "ك" }
|
||||
],
|
||||
"ز": [
|
||||
{ "code": 1688, "label": "ژ" }
|
||||
],
|
||||
"و": [
|
||||
{ "code": 1572, "label": "ؤ" }
|
||||
],
|
||||
".~normal": [
|
||||
{ "code": 1622, "label": "ٖ" },
|
||||
{ "code": 1648, "label": "ٰ" },
|
||||
{ "code": 1619, "label": "ٓ" },
|
||||
{ "code": 1615, "label": "ُ" },
|
||||
{ "code": 1616, "label": "ِ" },
|
||||
{ "code": 1614, "label": "َ" },
|
||||
{ "code": 1600, "label": "ـ" },
|
||||
{ "code": 1621, "label": "ٕ" },
|
||||
{ "code": 1618, "label": "ْ" },
|
||||
{ "code": 1617, "label": "ّ" },
|
||||
{ "code": 1612, "label": "ٌ" },
|
||||
{ "code": 1613, "label": "ٍ" },
|
||||
{ "code": 1611, "label": "ً" },
|
||||
{ "code": 1620, "label": "ٔ" }
|
||||
],
|
||||
".~uri": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".com" },
|
||||
{ "code": -255, "label": ".net" },
|
||||
{ "code": -255, "label": ".ir"}
|
||||
]
|
||||
}
|
||||
33
app/src/main/assets/ime/text/characters/mod/persian.json
Normal file
33
app/src/main/assets/ime/text/characters/mod/persian.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "characters/mod",
|
||||
"name": "persian",
|
||||
"direction": "rtl",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 0 },
|
||||
{ "code": -5, "label": "delete", "type": "enter_editing" }
|
||||
],
|
||||
[
|
||||
{ "code": -202, "label": "view_symbols", "type": "system_gui" },
|
||||
{ "code": 64, "label": "@", "variation": "email_address" },
|
||||
{ "code": 1548, "label": "،", "variation": "normal" },
|
||||
{ "code": 47, "label": "/", "variation": "uri" },
|
||||
{ "code": -210, "label": "language_switch", "type": "system_gui", "popup": [
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui" },
|
||||
{ "code": -100, "label": "settings", "type": "system_gui" }
|
||||
] },
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui", "popup": [
|
||||
{ "code": -100, "label": "settings", "type": "system_gui" }
|
||||
] },
|
||||
{ "code": 32, "label": " " },
|
||||
{ "code": 8204, "label": "half_space", "variation": "normal" },
|
||||
{ "code": 46, "label": ".", "variation": "email_address" },
|
||||
{ "code": 46, "label": ".", "variation": "normal" },
|
||||
{ "code": 46, "label": ".", "variation": "uri" },
|
||||
{ "code": 10, "label": "enter", "type": "enter_editing", "popup": [
|
||||
{ "code": -215, "label": "toggle_one_handed_mode", "type": "system_gui" },
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui" }
|
||||
] }
|
||||
]
|
||||
]
|
||||
}
|
||||
45
app/src/main/assets/ime/text/characters/persian.json
Normal file
45
app/src/main/assets/ime/text/characters/persian.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "persian",
|
||||
"direction": "rtl",
|
||||
"modifier": "persian",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 1590, "label": "ض" },
|
||||
{ "code": 1589, "label": "ص" },
|
||||
{ "code": 1579, "label": "ث" },
|
||||
{ "code": 1602, "label": "ق" },
|
||||
{ "code": 1601, "label": "ف" },
|
||||
{ "code": 1594, "label": "غ" },
|
||||
{ "code": 1593, "label": "ع" },
|
||||
{ "code": 1607, "label": "ه" },
|
||||
{ "code": 1582, "label": "خ" },
|
||||
{ "code": 1581, "label": "ح" },
|
||||
{ "code": 1580, "label": "ج" }
|
||||
],
|
||||
[
|
||||
{ "code": 1588, "label": "ش" },
|
||||
{ "code": 1587, "label": "س" },
|
||||
{ "code": 1740, "label": "ی" },
|
||||
{ "code": 1576, "label": "ب" },
|
||||
{ "code": 1604, "label": "ل" },
|
||||
{ "code": 1575, "label": "ا" },
|
||||
{ "code": 1578, "label": "ت" },
|
||||
{ "code": 1606, "label": "ن" },
|
||||
{ "code": 1605, "label": "م" },
|
||||
{ "code": 1705, "label": "ک" },
|
||||
{ "code": 1711, "label": "گ" }
|
||||
],
|
||||
[
|
||||
{ "code": 1592, "label": "ظ" },
|
||||
{ "code": 1591, "label": "ط" },
|
||||
{ "code": 1586, "label": "ز" },
|
||||
{ "code": 1585, "label": "ر" },
|
||||
{ "code": 1584, "label": "ذ" },
|
||||
{ "code": 1583, "label": "د" },
|
||||
{ "code": 1662, "label": "پ" },
|
||||
{ "code": 1608, "label": "و" },
|
||||
{ "code": 1670, "label": "چ" }
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -233,6 +233,7 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
|
||||
override fun onWindowShown() {
|
||||
keyboardViews[KeyboardMode.CHARACTERS]?.updateVisibility()
|
||||
smartbarManager.onWindowShown()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,7 +246,7 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets [activeKeyboardMode] and updates the [SmartbarManager.activeContainerId].
|
||||
* Sets [activeKeyboardMode] and updates the [SmartbarManager.isQuickActionsVisible].
|
||||
*/
|
||||
private fun setActiveKeyboardMode(mode: KeyboardMode) {
|
||||
textViewFlipper?.displayedChild =
|
||||
@@ -254,7 +255,7 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
keyboardViews[mode]?.requestLayout()
|
||||
keyboardViews[mode]?.requestLayoutAllKeys()
|
||||
activeKeyboardMode = mode
|
||||
smartbarManager.activeContainerId = smartbarManager.getPreferredContainerId()
|
||||
smartbarManager.isQuickActionsVisible = false
|
||||
}
|
||||
|
||||
override fun onSubtypeChanged(newSubtype: Subtype) {
|
||||
|
||||
@@ -69,4 +69,6 @@ object KeyCode {
|
||||
const val SWITCH_TO_CLIPBOARD_CONTEXT = -214
|
||||
const val TOGGLE_ONE_HANDED_MODE = -215
|
||||
const val URI_COMPONENT_TLD = -255
|
||||
|
||||
const val HALF_SPACE = 8204
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ class KeyView(
|
||||
updateKeyPressedBackground()
|
||||
|
||||
if (data.type == KeyType.CHARACTER && data.code != KeyCode.SPACE
|
||||
|| data.type == KeyType.NUMERIC
|
||||
&& data.code != KeyCode.HALF_SPACE || data.type == KeyType.NUMERIC
|
||||
) {
|
||||
label = getComputedLetter()
|
||||
} else {
|
||||
@@ -513,6 +513,9 @@ class KeyView(
|
||||
KeyCode.VIEW_SYMBOLS2 -> {
|
||||
label = resources.getString(R.string.key__view_symbols2)
|
||||
}
|
||||
KeyCode.HALF_SPACE -> {
|
||||
label = resources.getString(R.string.key__view_half_space)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ data class LayoutData(
|
||||
val type: LayoutType,
|
||||
val name: String,
|
||||
val direction: String,
|
||||
val modifier: String?,
|
||||
val arrangement: LayoutDataArrangement = listOf()
|
||||
) {
|
||||
private fun getComputedLayoutDataArrangement(): ComputedLayoutDataArrangement {
|
||||
|
||||
@@ -120,7 +120,12 @@ class LayoutManager(private val context: Context) : CoroutineScope by MainScope(
|
||||
val computedArrangement: ComputedLayoutDataArrangement = mutableListOf()
|
||||
|
||||
val mainLayout = loadLayout(main)
|
||||
val modifierLayout = loadLayout(modifier)
|
||||
val modifierToLoad = if (mainLayout?.modifier != null) {
|
||||
LTN(LayoutType.CHARACTERS_MOD, mainLayout.modifier)
|
||||
} else {
|
||||
modifier
|
||||
}
|
||||
val modifierLayout = loadLayout(modifierToLoad)
|
||||
val extensionLayout = loadLayout(extension)
|
||||
|
||||
if (extensionLayout != null) {
|
||||
@@ -139,14 +144,12 @@ class LayoutManager(private val context: Context) : CoroutineScope by MainScope(
|
||||
// merge main and mod here
|
||||
val mergedRow = mutableListOf<KeyData>()
|
||||
val firstModRow = modifierLayout.arrangement.firstOrNull()
|
||||
val firstModKey = firstModRow?.firstOrNull()
|
||||
if (firstModKey != null) {
|
||||
mergedRow.add(firstModKey)
|
||||
}
|
||||
mergedRow.addAll(mainRow)
|
||||
val lastModKey = firstModRow?.lastOrNull()
|
||||
if (lastModKey != null && firstModKey != lastModKey) {
|
||||
mergedRow.add(lastModKey)
|
||||
for (modKey in (firstModRow ?: listOf())) {
|
||||
if (modKey.code == 0) {
|
||||
mergedRow.addAll(mainRow)
|
||||
} else {
|
||||
mergedRow.add(modKey)
|
||||
}
|
||||
}
|
||||
computedArrangement.add(mergedRow)
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class SmartbarManager private constructor() :
|
||||
var smartbarView: SmartbarView? = null
|
||||
private set
|
||||
|
||||
var activeContainerId: Int = R.id.candidates
|
||||
var isQuickActionsVisible: Boolean = false
|
||||
set(value) { field = value; updateActiveContainerVisibility() }
|
||||
|
||||
private val candidateViewOnClickListener = View.OnClickListener { v ->
|
||||
@@ -60,21 +60,16 @@ class SmartbarManager private constructor() :
|
||||
florisboard.textInputManager.sendKeyPress(keyData)
|
||||
}
|
||||
private val quickActionOnClickListener = View.OnClickListener { v ->
|
||||
isQuickActionsVisible = false
|
||||
when (v.id) {
|
||||
R.id.quick_action_switch_to_media_context -> {
|
||||
activeContainerId = getPreferredContainerId()
|
||||
florisboard.setActiveInput(R.id.media_input)
|
||||
}
|
||||
R.id.quick_action_switch_to_media_context -> florisboard.setActiveInput(R.id.media_input)
|
||||
R.id.quick_action_open_settings -> florisboard.launchSettings()
|
||||
R.id.quick_action_one_handed_toggle -> florisboard.toggleOneHandedMode()
|
||||
else -> return@OnClickListener
|
||||
}
|
||||
}
|
||||
private val quickActionToggleOnClickListener = View.OnClickListener {
|
||||
activeContainerId = when (activeContainerId) {
|
||||
R.id.quick_actions -> getPreferredContainerId()
|
||||
else -> R.id.quick_actions
|
||||
}
|
||||
isQuickActionsVisible = !isQuickActionsVisible
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -113,6 +108,10 @@ class SmartbarManager private constructor() :
|
||||
}
|
||||
}
|
||||
|
||||
override fun onWindowShown() {
|
||||
isQuickActionsVisible = false
|
||||
}
|
||||
|
||||
// TODO: clean up resources here
|
||||
override fun onDestroy() {
|
||||
if (BuildConfig.DEBUG) Log.i(this::class.simpleName, "onDestroy()")
|
||||
@@ -148,21 +147,13 @@ class SmartbarManager private constructor() :
|
||||
|
||||
fun onStartInputView(keyboardMode: KeyboardMode, isComposingEnabled: Boolean) {
|
||||
this.isComposingEnabled = isComposingEnabled
|
||||
when {
|
||||
keyboardMode == KeyboardMode.NUMERIC ||
|
||||
keyboardMode == KeyboardMode.PHONE ||
|
||||
keyboardMode == KeyboardMode.PHONE2 -> {
|
||||
when (keyboardMode) {
|
||||
KeyboardMode.NUMERIC, KeyboardMode.PHONE, KeyboardMode.PHONE2 -> {
|
||||
smartbarView?.visibility = View.GONE
|
||||
}
|
||||
!isComposingEnabled -> {
|
||||
smartbarView?.visibility = View.VISIBLE
|
||||
activeContainerId = R.id.number_row
|
||||
}
|
||||
else -> {
|
||||
smartbarView?.visibility = View.VISIBLE
|
||||
activeContainerId = R.id.candidates
|
||||
//val tsm = florisboard.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE) as TextServicesManager
|
||||
//spellCheckerSession = tsm.newSpellCheckerSession(null, null, this, true)
|
||||
isQuickActionsVisible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -187,8 +178,6 @@ class SmartbarManager private constructor() :
|
||||
smartbarView.candidateViewList[1].text = "suggestions"
|
||||
smartbarView.candidateViewList[2].text = "nyi"
|
||||
} else {
|
||||
activeContainerId = R.id.candidates
|
||||
updateActiveContainerVisibility()
|
||||
smartbarView.candidateViewList[0].text = ""
|
||||
smartbarView.candidateViewList[1].text = composingText + "test"
|
||||
smartbarView.candidateViewList[2].text = ""
|
||||
@@ -226,31 +215,26 @@ class SmartbarManager private constructor() :
|
||||
private fun updateActiveContainerVisibility() {
|
||||
val smartbarView = smartbarView ?: return
|
||||
|
||||
when (activeContainerId) {
|
||||
R.id.quick_actions -> {
|
||||
smartbarView.candidatesView?.visibility = View.GONE
|
||||
smartbarView.numberRowView?.visibility = View.GONE
|
||||
smartbarView.quickActionsView?.visibility = View.VISIBLE
|
||||
smartbarView.quickActionToggle?.rotation = -180.0f
|
||||
}
|
||||
R.id.number_row -> {
|
||||
smartbarView.candidatesView?.visibility = View.GONE
|
||||
smartbarView.numberRowView?.visibility = View.VISIBLE
|
||||
smartbarView.quickActionsView?.visibility = View.GONE
|
||||
smartbarView.quickActionToggle?.rotation = 0.0f
|
||||
}
|
||||
R.id.candidates -> {
|
||||
if (isQuickActionsVisible) {
|
||||
smartbarView.candidatesView?.visibility = View.GONE
|
||||
smartbarView.numberRowView?.visibility = View.GONE
|
||||
smartbarView.quickActionsView?.visibility = View.VISIBLE
|
||||
smartbarView.quickActionToggle?.rotation = -180.0f
|
||||
} else {
|
||||
if (florisboard.prefs.suggestion.enabled) {
|
||||
smartbarView.candidatesView?.visibility = View.VISIBLE
|
||||
smartbarView.numberRowView?.visibility = View.GONE
|
||||
smartbarView.quickActionsView?.visibility = View.GONE
|
||||
smartbarView.quickActionToggle?.rotation = 0.0f
|
||||
}
|
||||
else -> {
|
||||
} else if (textInputManager.getActiveKeyboardMode() == KeyboardMode.CHARACTERS) {
|
||||
smartbarView.candidatesView?.visibility = View.GONE
|
||||
smartbarView.numberRowView?.visibility = View.VISIBLE
|
||||
smartbarView.quickActionsView?.visibility = View.GONE
|
||||
} else {
|
||||
smartbarView.candidatesView?.visibility = View.GONE
|
||||
smartbarView.numberRowView?.visibility = View.GONE
|
||||
smartbarView.quickActionsView?.visibility = View.GONE
|
||||
smartbarView.quickActionToggle?.rotation = 0.0f
|
||||
}
|
||||
smartbarView.quickActionToggle?.rotation = 0.0f
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
117
app/src/main/res/values-it/strings.xml
Normal file
117
app/src/main/res/values-it/strings.xml
Normal file
@@ -0,0 +1,117 @@
|
||||
<resources>
|
||||
<string name="key__phone_pause">Pausa</string>
|
||||
<string name="key__phone_wait">Attendi</string>
|
||||
<string name="key_popup__threedots_alt">Icona a tre puntini.Se visibile, indica che è possibile utilizzare più lettere se premuto a lungo.</string>
|
||||
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emojis">Emojis</string>
|
||||
<string name="media__tab__emoticons">Emoticons</string>
|
||||
<string name="media__tab__kaomoji">Kaomoji</string>
|
||||
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion">Smileys & Emotions</string>
|
||||
<string name="emoji__category__people_body">Persone & Corpo</string>
|
||||
<string name="emoji__category__animals_nature">Animali & Natura</string>
|
||||
<string name="emoji__category__food_drink">Cibo & Bevande</string>
|
||||
<string name="emoji__category__travel_places">Viaggi & Luoghi</string>
|
||||
<string name="emoji__category__activities">Attività</string>
|
||||
<string name="emoji__category__objects">Oggetti</string>
|
||||
<string name="emoji__category__symbols">Simboli</string>
|
||||
<string name="emoji__category__flags">Bandiere</string>
|
||||
|
||||
<!-- Smartbar strings -->
|
||||
<string name="smartbar__quick_action_toggle__alt">Attiva / disattiva azione rapida. Se premuto, alterna i suggerimenti di parole ed i pulsanti di azione rapida.</string>
|
||||
<string name="smartbar__quick_action__one_handed_mode">Attiva / disattiva la modalità a una mano.</string>
|
||||
<string name="smartbar__quick_action__open_settings">Apri Impostazioni.</string>
|
||||
<string name="smartbar__quick_action__switch_to_media_context">Passa alla visualizzazione dei media.</string>
|
||||
|
||||
<!-- Settings UI strings -->
|
||||
<string name="settings__title">Impostazioni</string>
|
||||
<string name="settings__menu">Altre opzioni</string>
|
||||
<string name="settings__menu_about">Informazioni su</string>
|
||||
<string name="settings__menu_help">Aiuto & feedback</string>
|
||||
<string name="settings__navigation__home">Home</string>
|
||||
<string name="settings__navigation__keyboard">Tastiera</string>
|
||||
<string name="settings__navigation__looknfeel">Aspetto & funzionalità</string>
|
||||
<string name="settings__navigation__gestures">Gesti</string>
|
||||
<string name="settings__navigation__advanced">Avanzate</string>
|
||||
|
||||
<string name="settings__home__title">Benvenuto in %s</string>
|
||||
<string name="settings__home__ime_not_enabled">FlorisBoard non è abilitato nel sistema e quindi non sarà disponibile come metodo di immissione.Clicca quì per risolvere questo problema.</string>
|
||||
<string name="settings__home__ime_not_selected">FlorisBoard non è la tastiera predefinita. Clicca quì per risolvere questo problema.</string>
|
||||
<string name="settings__home__contribute">Grazie per aver provato FlorisBoard! Questo progetto è ancora in fase alfa e quindi manca di alcune funzionalità. Se trovate qualche bug o volete dare un suggerimento, date un\'occhiata al repo su GitHub e segnalate un problema. Questo aiuta a rendere FlorisBoard migliore. Grazie!</string>
|
||||
|
||||
<string name="settings__keyboard__title">Tastiera & Correzione del testo</string>
|
||||
<string name="settings__keyboard__subtype_no_subtypes_configured_warning">Sembra che tu non abbia configurato nessuno stile di input personalizzato. Come ripiego verrà utilizzato lo stile input English/QWERTY!</string>
|
||||
<string name="settings__keyboard__subtype_add">Aggiungi</string>
|
||||
<string name="settings__keyboard__subtype_add_title">Aggiungi stile input</string>
|
||||
<string name="settings__keyboard__subtype_apply">Applica</string>
|
||||
<string name="settings__keyboard__subtype_cancel">Annulla</string>
|
||||
<string name="settings__keyboard__subtype_delete">Elimina</string>
|
||||
<string name="settings__keyboard__subtype_edit_title">Modifica stile di input</string>
|
||||
<string name="settings__keyboard__subtype_locale">Locale</string>
|
||||
<string name="settings__keyboard__subtype_layout">Layout della tastiera</string>
|
||||
<string name="settings__keyboard__subtype_error_already_exists">Questo stile di input esiste già !</string>
|
||||
<string name="pref__suggestion__title">Suggerimenti</string>
|
||||
<string name="pref__suggestion__enabled__label">Visualizza suggerimenti mentre digiti</string>
|
||||
<string name="pref__suggestion__enabled__summary">Verrà visualizzato nella parte superiore della tastiera</string>
|
||||
<string name="pref__suggestion__use_pref_words__label">Suggerimenti per la parola successiva</string>
|
||||
<string name="pref__suggestion__use_pref_words__summary">Utilizzare le parole precedenti per generare suggerimenti</string>
|
||||
<string name="pref__correction__title">Correzioni</string>
|
||||
<string name="pref__correction__double_space_period__label">Doppio tocco barra spaziatrice</string>
|
||||
<string name="pref__correction__double_space_period__summary">Doppio tocco su barra spaziatrice per mettere il punto (.) seguito da uno spazio</string>
|
||||
|
||||
<string name="settings__looknfeel__title">Aspetto & funzionalità</string>
|
||||
<string name="pref__looknfeel__group_layout__label">Layout</string>
|
||||
<string name="pref__looknfeel__height_factor__label">Altezza tastiera</string>
|
||||
<string name="pref__looknfeel__one_handed_mode__label">Modalità ad una mano</string>
|
||||
<string name="pref__looknfeel__group_keypress__label">Pressione tasti</string>
|
||||
<string name="pref__looknfeel__long_press_delay__label">Ritardo lunga pressione tasti</string>
|
||||
<string name="pref__looknfeel__sound_enabled__label">Suono pressione tasti</string>
|
||||
<string name="pref__looknfeel__sound_volume__label">Volume del suono alla pressione dei tasti</string>
|
||||
<string name="pref__looknfeel__vibration_enabled__label">Vibrazione alla pressione dei tasti</string>
|
||||
<string name="pref__looknfeel__vibration_strength__label">Intensità della vibrazione alla pressione dei tasti</string>
|
||||
<string name="pref__theme__name__label">Tema tastiera</string>
|
||||
|
||||
<string name="settings__gestures__title">Gesti</string>
|
||||
|
||||
<string name="settings__advanced__title">Avanzate</string>
|
||||
<string name="pref__advanced__settings_theme__label">Impostazioni tema</string>
|
||||
<string name="pref__advanced__show_app_icon__label">Mostra icona nel launcher</string>
|
||||
|
||||
<!-- About UI strings -->
|
||||
<string name="about__title">Informazioni su</string>
|
||||
<string name="about__app_icon_content_description">Icona dell\'app FlorisBoard</string>
|
||||
<string name="about__view_licenses">Licenze open source</string>
|
||||
<string name="about__view_privacy_policy">Norme sulla privacy</string>
|
||||
<string name="about__view_source_code">Codice sorgente</string>
|
||||
|
||||
<string name="about__license__title">Licenze open source</string>
|
||||
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title">Configurazione</string>
|
||||
<string name="setup__prev_button">Precedente</string>
|
||||
<string name="setup__cancel_button">Annulla</string>
|
||||
<string name="setup__next_button">Avanti</string>
|
||||
<string name="setup__finish_button">Fine</string>
|
||||
<string name="setup__ok_button">OK</string>
|
||||
|
||||
<string name="setup__welcome__title">Benvenuto!</string>
|
||||
<string name="setup__welcome__intro">TGrazie per aver provato FlorisBoard! Prima che possiate iniziare ad usarlo, dobbiamo fare le solite cose e abilitarlo nelle impostazioni di sistema, impostare la vostra lingua/ il layout preferito, ecc... Ma non preoccuparti: segui questa procedura guidata </string>
|
||||
<string name="setup__welcome__privacy">[[ TODO: inserisci quì la descrizione della privacy ]]</string>
|
||||
<string name="setup__welcome__trust">Il codice sorgente di FlorisBoard è accessibile pubblicamente a chiunque, quindi puoi facilmente rivedere cosa fa FlorisBoard in background. Controlla il link nel repository in basso.</string>
|
||||
<string name="setup__welcome__contribute">Un\'ultima cosa prima di iniziare l\'installazione - se riscontri errori / arresti anomali / problemi con FlorisBoard o hai una richiesta di funzionalità - vai al repository GitHub collegato di seguito e presenta un problema. Questo aiuta a migliorare l\'esperienza per tutti gli utenti!</string>
|
||||
<string name="setup__welcome__outro">Per avviare l\'installazione, fai clic su <i>AVANTI</i>.</string>
|
||||
|
||||
<string name="setup__enable_ime__title">Abilita FlorisBoard</string>
|
||||
<string name="setup__enable_ime__text_before_enabled">Android richiede che ogni tastiera personalizzata debba essere abilitata manualmente prima di poterla utilizzare. Fai clic sul pulsante in basso per passare a <i>Lingua & Input</i>impostazioni, quindi assicurati di selezionare\'<i>FlorisBoard</i>\'.</string>
|
||||
<string name="setup__enable_ime__text_button_language_and_input">Apri lingue & Impostazioni di input</string>
|
||||
<string name="setup__enable_ime__text_after_enabled">FlorisBoard è stato abilitato con successo. Per continuare, fai clic su <i>AVANTI</i>!</string>
|
||||
|
||||
<string name="setup__make_default__title">Rendi FlorisBoard predefinita</string>
|
||||
<string name="setup__make_default__text_before_switch">FlorisBoard è ora abilitato nel tuo sistema. Per usarlo attivamente, passa a FlorisBoard selezionandolo nella finestra di dialogo del selettore di input!</string>
|
||||
<string name="setup__make_default__text_switch_button">Cambia tastiera</string>
|
||||
<string name="setup__make_default__text_after_switch">Hai cambiato con successo la tastiera predefinita su FlorisBoard!</string>
|
||||
|
||||
<string name="setup__finish__title">Installazione terminata!</string>
|
||||
</resources>
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="pref__looknfeel__height_factor__entries">
|
||||
<item>Extra-short</item>
|
||||
<item>Short</item>
|
||||
<item>Mid-short</item>
|
||||
<item>Normal</item>
|
||||
<item>Mid-tall</item>
|
||||
<item>Tall</item>
|
||||
<item>Extra-tall</item>
|
||||
<item>@string/pref__looknfeel__height_factor__extra_short</item>
|
||||
<item>@string/pref__looknfeel__height_factor__short</item>
|
||||
<item>@string/pref__looknfeel__height_factor__mid_short</item>
|
||||
<item>@string/pref__looknfeel__height_factor__normal</item>
|
||||
<item>@string/pref__looknfeel__height_factor__mid_tall</item>
|
||||
<item>@string/pref__looknfeel__height_factor__tall</item>
|
||||
<item>@string/pref__looknfeel__height_factor__extra_tall</item>
|
||||
</string-array>
|
||||
<string-array name="pref__looknfeel__height_factor__values">
|
||||
<item>extra_short</item>
|
||||
@@ -20,9 +20,9 @@
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref__looknfeel__one_handed_mode__entries">
|
||||
<item>Off</item>
|
||||
<item>Right-handed mode</item>
|
||||
<item>Left-handed mode</item>
|
||||
<item>@string/pref__looknfeel__one_handed_mode__off</item>
|
||||
<item>@string/pref__looknfeel__one_handed_mode__right</item>
|
||||
<item>@string/pref__looknfeel__one_handed_mode__left</item>
|
||||
</string-array>
|
||||
<string-array name="pref__looknfeel__one_handed_mode__values">
|
||||
<item>off</item>
|
||||
@@ -31,9 +31,9 @@
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref__advanced__settings_theme__entries">
|
||||
<item>System default</item>
|
||||
<item>Light</item>
|
||||
<item>Dark</item>
|
||||
<item>@string/settings__system_default</item>
|
||||
<item>@string/pref__advanced__settings_theme__light</item>
|
||||
<item>@string/pref__advanced__settings_theme__dark</item>
|
||||
</string-array>
|
||||
<string-array name="pref__advanced__settings_theme__values">
|
||||
<item>auto</item>
|
||||
|
||||
@@ -1,26 +1,12 @@
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">FlorisBoard</string>
|
||||
|
||||
<string name="florisboard__repo_url" translatable="false">https://github.com/florisboard/florisboard</string>
|
||||
<string name="florisboard__privacy_policy_url" translatable="false">https://gist.github.com/patrickgold/a18f1e47468d72f0868afc69d6faaf0b</string>
|
||||
|
||||
<string name="key__phone_pause">Pause</string>
|
||||
<string name="key__phone_wait">Wait</string>
|
||||
<string name="key__view_characters">ABC</string>
|
||||
<string name="key__view_numeric">1 2\n3 4</string>
|
||||
<string name="key__view_phone">123</string>
|
||||
<string name="key__view_phone2">* #</string>
|
||||
<string name="key__view_symbols">\?123</string>
|
||||
<string name="key__view_symbols2">=\\<</string>
|
||||
|
||||
<string name="key_popup__threedots_alt">Three-dot icon. If visible, indicates that more letters can be used if longer pressed.</string>
|
||||
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emojis">Emojis</string>
|
||||
<string name="media__tab__emoticons">Emoticons</string>
|
||||
<string name="media__tab__emoticons_label">;-)</string>
|
||||
<string name="media__tab__kaomoji">Kaomoji</string>
|
||||
<string name="media__tab__kaomoji_label">(^-^*)/</string>
|
||||
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion">Smileys & Emotions</string>
|
||||
@@ -49,6 +35,7 @@
|
||||
<string name="settings__navigation__looknfeel">Look & feel</string>
|
||||
<string name="settings__navigation__gestures">Gestures</string>
|
||||
<string name="settings__navigation__advanced">Advanced</string>
|
||||
<string name="settings__system_default">System default</string>
|
||||
|
||||
<string name="settings__home__title">Welcome to %s</string>
|
||||
<string name="settings__home__ime_not_enabled">FlorisBoard is not enabled in the system and thus won\'t be available as an input method in the input picker. Click here to resolve this issue.</string>
|
||||
@@ -67,7 +54,7 @@
|
||||
<string name="settings__keyboard__subtype_layout">Keyboard layout</string>
|
||||
<string name="settings__keyboard__subtype_error_already_exists">This subtype already exists!</string>
|
||||
<string name="pref__suggestion__title">Suggestions</string>
|
||||
<string name="pref__suggestion__enabled__label">[NYI] Display suggestions while you type</string>
|
||||
<string name="pref__suggestion__enabled__label">Display suggestions while you type</string>
|
||||
<string name="pref__suggestion__enabled__summary">Will show on top of the keyboard</string>
|
||||
<string name="pref__suggestion__use_pref_words__label">[NYI] Next-word suggestions</string>
|
||||
<string name="pref__suggestion__use_pref_words__summary">Use previous words for generating suggestions</string>
|
||||
@@ -78,7 +65,17 @@
|
||||
<string name="settings__looknfeel__title">Look & feel</string>
|
||||
<string name="pref__looknfeel__group_layout__label">Layout</string>
|
||||
<string name="pref__looknfeel__height_factor__label">Keyboard height</string>
|
||||
<string name="pref__looknfeel__height_factor__extra_short">Extra-short</string>
|
||||
<string name="pref__looknfeel__height_factor__short">Short</string>
|
||||
<string name="pref__looknfeel__height_factor__mid_short">Mid-short</string>
|
||||
<string name="pref__looknfeel__height_factor__normal">Normal</string>
|
||||
<string name="pref__looknfeel__height_factor__mid_tall">Mid-tall</string>
|
||||
<string name="pref__looknfeel__height_factor__tall">Tall</string>
|
||||
<string name="pref__looknfeel__height_factor__extra_tall">Extra-tall</string>
|
||||
<string name="pref__looknfeel__one_handed_mode__label">One-handed mode</string>
|
||||
<string name="pref__looknfeel__one_handed_mode__off">Off</string>
|
||||
<string name="pref__looknfeel__one_handed_mode__right">Right-handed mode</string>
|
||||
<string name="pref__looknfeel__one_handed_mode__left">Left-handed mode</string>
|
||||
<string name="pref__looknfeel__group_keypress__label">Key press</string>
|
||||
<string name="pref__looknfeel__long_press_delay__label">Long key press delay</string>
|
||||
<string name="pref__looknfeel__sound_enabled__label">Sound on key press</string>
|
||||
@@ -91,6 +88,8 @@
|
||||
|
||||
<string name="settings__advanced__title">Advanced</string>
|
||||
<string name="pref__advanced__settings_theme__label">Settings theme</string>
|
||||
<string name="pref__advanced__settings_theme__light">Light</string>
|
||||
<string name="pref__advanced__settings_theme__dark">Dark</string>
|
||||
<string name="pref__advanced__show_app_icon__label">Show app icon in launcher</string>
|
||||
|
||||
<!-- About UI strings -->
|
||||
|
||||
18
app/src/main/res/values/strings_dont_translate.xml
Normal file
18
app/src/main/res/values/strings_dont_translate.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">FlorisBoard</string>
|
||||
|
||||
<string name="florisboard__repo_url" translatable="false">https://github.com/florisboard/florisboard</string>
|
||||
<string name="florisboard__privacy_policy_url" translatable="false">https://gist.github.com/patrickgold/a18f1e47468d72f0868afc69d6faaf0b</string>
|
||||
|
||||
<string name="key__view_characters" translatable="false">ABC</string>
|
||||
<string name="key__view_numeric" translatable="false">1 2\n3 4</string>
|
||||
<string name="key__view_phone" translatable="false">123</string>
|
||||
<string name="key__view_phone2" translatable="false">* #</string>
|
||||
<string name="key__view_symbols" translatable="false">\?123</string>
|
||||
<string name="key__view_symbols2" translatable="false">=\\<</string>
|
||||
<string name="key__view_half_space" translatable="false">↲</string>
|
||||
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emoticons_label" translatable="false">;-)</string>
|
||||
<string name="media__tab__kaomoji_label" translatable="false">(^-^*)/</string>
|
||||
</resources>
|
||||
@@ -4,7 +4,7 @@ Note: This project is currently in alpha stage. If you want to see a feature bei
|
||||
|
||||
Currently implemented and fully working features:
|
||||
* Latin keyboard layouts
|
||||
* QWERTY, QWERTZ, AZERTY, Spanish and Swiss. More coming in future releases
|
||||
* QWERTY, QWERTZ, AZERTY, Spanish, Norwegian, Swedish/Finnish, Danish, Icelandic and Swiss. More coming in future releases
|
||||
* Easy switching between languages/layouts by defining subtypes in the settings
|
||||
* Keyboard layouts for typing in a (phone) number
|
||||
* Special characters input
|
||||
@@ -14,4 +14,4 @@ Currently implemented and fully working features:
|
||||
* Customization of key press sound/vibration
|
||||
|
||||
Source code (Apache 2.0) and project management:
|
||||
https://github.com/florisboard/florisboard
|
||||
https://github.com/florisboard/florisboard
|
||||
|
||||
17
fastlane/metadata/android/it/full_description.txt
Normal file
17
fastlane/metadata/android/it/full_description.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
FlorisBoard è una tastiera open source mirata a fornirti un modo semplice per digitare nel rispetto della tua privacy.
|
||||
|
||||
Nota: questo progetto è attualmente in fase alpha. Se desideri vedere una funzionalità implementata o segnalare un bug, visita il repository di questo progetto (link alla fine della descrizione) su GitHub e segnala un problema. Questo aiuta a rendere FlorisBoard ancora migliore! Grazie!
|
||||
|
||||
Funzionalità attualmente implementate e completamente funzionanti:
|
||||
* Layout della tastiera
|
||||
* QWERTY, QWERTZ, AZERTY, Spagnolo, norvegese, svedese,finlandese, danese, islandese e svizzero. Altre novità in arrivo nelle versioni future
|
||||
* Facile passaggio tra lingue / layout nelle impostazioni
|
||||
* Layout di tastiera tipo tastierino telefonico per digitazione di un numero
|
||||
* Inserimento di caratteri speciali
|
||||
* Tastiera Emoji/Emoticon
|
||||
* Modalità con una sola mano per digitare più facilmente su dispositivi di grandi dimensioni
|
||||
* Tema chiaro e scuro per l'interfaccia utente e per tastiera (altri temi arriveranno nelle versioni future)
|
||||
* Personalizzazione del suono / vibrazione della pressione dei tasti
|
||||
|
||||
Codice sorgente (Apache 2.0) e gestione del progetto:
|
||||
https://github.com/florisboard/florisboard
|
||||
1
fastlane/metadata/android/it/short_description.txt
Normal file
1
fastlane/metadata/android/it/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Una tastiera open source. Attualmente in fase alfa.
|
||||
1
fastlane/metadata/android/it/title.txt
Normal file
1
fastlane/metadata/android/it/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
FlorisBoard
|
||||
Reference in New Issue
Block a user