Added plurals resource.

This commit is contained in:
Erik C. Thauvin 2016-08-28 12:27:38 -07:00
parent 6f1ad8a69b
commit 2283c42046
4 changed files with 14 additions and 29 deletions

View file

@ -44,7 +44,6 @@ import com.google.gson.JsonSyntaxException
import net.thauvin.erik.android.tesremoteprogrammer.models.Config import net.thauvin.erik.android.tesremoteprogrammer.models.Config
import net.thauvin.erik.android.tesremoteprogrammer.models.Configurations import net.thauvin.erik.android.tesremoteprogrammer.models.Configurations
import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf
import net.thauvin.erik.android.tesremoteprogrammer.util.plural
import org.jetbrains.anko.* import org.jetbrains.anko.*
import org.jetbrains.anko.design.textInputLayout import org.jetbrains.anko.design.textInputLayout
import permissions.dispatcher.NeedsPermission import permissions.dispatcher.NeedsPermission
@ -304,10 +303,12 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
config = Gson().fromJson(InputStreamReader(resources.openRawResource(it)), config = Gson().fromJson(InputStreamReader(resources.openRawResource(it)),
Config::class.java) Config::class.java)
// val errors = StringBuilder() if (BuildConfig.DEBUG) {
// if (!validateConfig(config, errors)) { val errors = StringBuilder()
// info("${config.params.name}: $errors") if (!validateConfig(config, errors)) {
// } info(">>> ${config.params.name}: " + Html.fromHtml(errors.toString()))
}
}
confs.configs.put(config.params.name, config) confs.configs.put(config.params.name, config)
} }
@ -413,7 +414,7 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
if (size > 0 && (fields[1].text.length != size)) { if (size > 0 && (fields[1].text.length != size)) {
isValid = false isValid = false
fields[1].error = getString(R.string.error_invalid_size, size, fields[1].error = getString(R.string.error_invalid_size, size,
getString(R.string.error_digit).plural(size)) resources.getQuantityString(R.plurals.error_digit, size))
} }
return isValid return isValid

View file

@ -41,7 +41,6 @@ import net.thauvin.erik.android.tesremoteprogrammer.filters.NumberFilter
import net.thauvin.erik.android.tesremoteprogrammer.models.Option import net.thauvin.erik.android.tesremoteprogrammer.models.Option
import net.thauvin.erik.android.tesremoteprogrammer.models.Params import net.thauvin.erik.android.tesremoteprogrammer.models.Params
import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf
import net.thauvin.erik.android.tesremoteprogrammer.util.plural
import net.thauvin.erik.android.tesremoteprogrammer.widget.ScrollAwareFABBehavior import net.thauvin.erik.android.tesremoteprogrammer.widget.ScrollAwareFABBehavior
import org.jetbrains.anko.* import org.jetbrains.anko.*
import org.jetbrains.anko.custom.ankoView import org.jetbrains.anko.custom.ankoView
@ -230,7 +229,7 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
val size = option.fields[i].size val size = option.fields[i].size
if (!option.fields[i].alpha && size > 0 && (v.length() != size)) { if (!option.fields[i].alpha && size > 0 && (v.length() != size)) {
v.error = getString(R.string.error_invalid_size, size, v.error = getString(R.string.error_invalid_size, size,
getString(R.string.error_digit).plural(size)) resources.getQuantityString(R.plurals.error_digit, size))
isValid = false isValid = false
} }
} }

View file

@ -17,24 +17,6 @@
*/ */
package net.thauvin.erik.android.tesremoteprogrammer.util package net.thauvin.erik.android.tesremoteprogrammer.util
fun String.plural(size: Int): String {
val consonants = "bcdfghjklmnpqrstvwxz"
if (size > 1 && this.length > 2) {
if ((this.endsWith("o", true) || this.endsWith("s", true)) &&
consonants.contains(this[this.length - 2], true)) {
return this + "es"
}
if (this.endsWith("y", true) &&
consonants.contains(this[this.length - 2], true)) {
return this + "ies"
}
}
return this + "s"
}
fun String.replaceAll(replace: Array<Pair<String, String>>): String { fun String.replaceAll(replace: Array<Pair<String, String>>): String {
val result = StringBuilder(this) val result = StringBuilder(this)
var offset: Int var offset: Int

View file

@ -5,7 +5,10 @@
<string name="alert_config_error">Configuration Errors</string> <string name="alert_config_error">Configuration Errors</string>
<string name="app_name">TES Remote Programmer</string> <string name="app_name">TES Remote Programmer</string>
<string name="dialog_import">Import</string> <string name="dialog_import">Import</string>
<string name="error_digit">digit</string> <plurals name="error_digit">
<item quantity="one">digit</item>
<item quantity="other">digits</item>
</plurals>
<string name="error_invalid_dtmf">Invalid DTMF: <xliff:g id="type">%1$s</xliff:g></string> <string name="error_invalid_dtmf">Invalid DTMF: <xliff:g id="type">%1$s</xliff:g></string>
<string name="error_invalid_field">Missing or invalid fields data.</string> <string name="error_invalid_field">Missing or invalid fields data.</string>
<string name="error_invalid_size">Invalid: <xliff:g id="size">%1$d</xliff:g> <xliff:g id="type">%2$s</xliff:g> required</string> <string name="error_invalid_size">Invalid: <xliff:g id="size">%1$d</xliff:g> <xliff:g id="type">%2$s</xliff:g> required</string>
@ -20,6 +23,6 @@
<string name="validate_invalid_param">&lt;p>&lt;b>params&lt;/b>: &lt;font color=\"red\"><xliff:g id="param">%1$s</xliff:g>&lt;/font> invalid&lt;/p></string> <string name="validate_invalid_param">&lt;p>&lt;b>params&lt;/b>: &lt;font color=\"red\"><xliff:g id="param">%1$s</xliff:g>&lt;/font> invalid&lt;/p></string>
<string name="validate_missing_fields">&lt;p>&lt;b>opts[<xliff:g id="opts">%1$d</xliff:g>]&lt;/b>: &lt;font color=\"red\">fields&lt;/font> missing</string> <string name="validate_missing_fields">&lt;p>&lt;b>opts[<xliff:g id="opts">%1$d</xliff:g>]&lt;/b>: &lt;font color=\"red\">fields&lt;/font> missing</string>
<string name="validate_missing_param">&lt;p>&lt;p>&lt;b>params&lt;/b>: &lt;font color=\"red\"><xliff:g id="param">%1$s</xliff:g>&lt;/font> missing&lt;/p></string> <string name="validate_missing_param">&lt;p>&lt;p>&lt;b>params&lt;/b>: &lt;font color=\"red\"><xliff:g id="param">%1$s</xliff:g>&lt;/font> missing&lt;/p></string>
<string name="validate_missing_opts">&lt;font color=\"red\">opts&lt;/font> missing.</string> <string name="validate_missing_opts">&lt;p>&lt;font color=\"red\">opts&lt;/font> missing.&lt;/p></string>
<string name="validate_unused_field">&lt;b>opts[<xliff:g id="opts">%1$d</xliff:g>]&lt;/b>, &lt;font color=\"red\">fields[<xliff:g id="field">%2$d</xliff:g>]&lt;/font>: unused</string> <string name="validate_unused_field">&lt;p>&lt;b>opts[<xliff:g id="opts">%1$d</xliff:g>]&lt;/b>, &lt;font color=\"red\">fields[<xliff:g id="field">%2$d</xliff:g>]&lt;/font>: unused&lt;/p></string>
</resources> </resources>