From eee49f5a31e1b80dcac0a6138ec6e808a5ed5c62 Mon Sep 17 00:00:00 2001 From: Aaron Huttner Date: Sat, 27 Aug 2016 17:00:54 -0400 Subject: [PATCH] Add spanish translations Add Spanish translations for enums and some strings. Version bump. --- app/build.gradle | 4 +- .../res/values/debug_strings.xml | 8 +- app/src/internalDebug/res/values/strings.xml | 2 +- app/src/internalDebug/res/values/titles.xml | 4 +- .../grommet/data/db/model/Name.java | 25 ++- .../grommet/data/db/model/RockyRequest.java | 83 ++++--- .../ui/registration/RegistrationActivity.java | 16 ++ .../ReviewAndConfirmFragment.java | 4 + .../rockthevote/grommet/util/LocaleUtils.java | 27 +++ app/src/main/res/menu/registration.xml | 4 +- app/src/main/res/values-es/strings.xml | 210 ++++++++++++++++++ .../main/res/values/open_source_licenses.xml | 20 +- app/src/main/res/values/strings.xml | 67 +++--- 13 files changed, 384 insertions(+), 90 deletions(-) create mode 100644 app/src/main/java/com/rockthevote/grommet/util/LocaleUtils.java create mode 100644 app/src/main/res/values-es/strings.xml diff --git a/app/build.gradle b/app/build.gradle index dbe72730..1994d227 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ // Manifest version information! def versionMajor = 1 -def versionMinor = 0 -def versionPatch = 9 +def versionMinor = 1 +def versionPatch = 0 def versionBuild = 0 // bump for dogfood builds, public betas, etc. apply plugin: 'com.android.application' diff --git a/app/src/internalDebug/res/values/debug_strings.xml b/app/src/internalDebug/res/values/debug_strings.xml index edaba27b..b95cefaf 100644 --- a/app/src/internalDebug/res/values/debug_strings.xml +++ b/app/src/internalDebug/res/values/debug_strings.xml @@ -1,8 +1,8 @@ - Development Settings - Enter the URL of the server to which you want to connect.\n\ne.g., https://bob-loblaw.local/1.0/ - Enter the host of the server through which you want to proxy.\n\ne.g., 12.34.56.78:9000 - Debug settings are available in this drawer. + Development Settings + Enter the URL of the server to which you want to connect.\n\ne.g., https://bob-loblaw.local/1.0/ + Enter the host of the server through which you want to proxy.\n\ne.g., 12.34.56.78:9000 + Debug settings are available in this drawer. diff --git a/app/src/internalDebug/res/values/strings.xml b/app/src/internalDebug/res/values/strings.xml index 9dfc494f..f000e876 100644 --- a/app/src/internalDebug/res/values/strings.xml +++ b/app/src/internalDebug/res/values/strings.xml @@ -1,7 +1,7 @@ - Lorem ipsum dolor sit amet, aperiri gubergren voluptatibus ea vis. + Lorem ipsum dolor sit amet, aperiri gubergren voluptatibus ea vis. Harum nullam referrentur no vel. Partem saperet appellantur nec id. Malis latine vituperata at cum.Duo tota ceteros inimicus id, est te oblique consulatu complectitur, id dolor iuvaret consequuntur usu. Scripta iuvaret repudiare eam te, usu prima inciderint ex. Ad eum eirmod diff --git a/app/src/internalDebug/res/values/titles.xml b/app/src/internalDebug/res/values/titles.xml index 22358ce6..53b3a998 100644 --- a/app/src/internalDebug/res/values/titles.xml +++ b/app/src/internalDebug/res/values/titles.xml @@ -1,5 +1,5 @@ - Grommet Sample Internal Debug - Grommet Internal (D) + Grommet Sample Internal Debug + Grommet Internal (D) diff --git a/app/src/main/java/com/rockthevote/grommet/data/db/model/Name.java b/app/src/main/java/com/rockthevote/grommet/data/db/model/Name.java index 1df1deb5..9442f353 100644 --- a/app/src/main/java/com/rockthevote/grommet/data/db/model/Name.java +++ b/app/src/main/java/com/rockthevote/grommet/data/db/model/Name.java @@ -12,6 +12,8 @@ import com.rockthevote.grommet.util.Strings; import com.squareup.sqlbrite.BriteDatabase; +import java.util.Locale; + import rx.functions.Func1; @AutoValue @@ -202,24 +204,35 @@ public static Suffix fromString(String suffix) { } public enum Prefix { - MR("Mr"), MS("Ms"), MRS("Mrs"), MISS("Miss"); + MR("Mr", "Sr"), + MS("Ms", "Ms"), // intentionally the same + MRS("Mrs", "Srta"), + MISS("Miss", "Sra"); - private final String title; + private final String enTitle; + private final String esTitle; - Prefix(String title) { - this.title = title; + Prefix(String enTitle, String esTitle) { + this.enTitle = enTitle; + this.esTitle = esTitle; } @Override @NonNull public String toString() { - return title; + if ("es".equals(Locale.getDefault().getLanguage())) { + return esTitle; + } else { + // default to english + return enTitle; + } } @NonNull public static Prefix fromString(String title) { for (Prefix value : Prefix.values()) { - if (value.title.equals(title)) { + if (value.enTitle.equals(title) || + value.esTitle.equals(title)) { return value; } } diff --git a/app/src/main/java/com/rockthevote/grommet/data/db/model/RockyRequest.java b/app/src/main/java/com/rockthevote/grommet/data/db/model/RockyRequest.java index a4f0295a..cd1abbcb 100644 --- a/app/src/main/java/com/rockthevote/grommet/data/db/model/RockyRequest.java +++ b/app/src/main/java/com/rockthevote/grommet/data/db/model/RockyRequest.java @@ -12,6 +12,7 @@ import com.rockthevote.grommet.util.Dates; import java.util.Date; +import java.util.Locale; import rx.functions.Func1; @@ -286,29 +287,37 @@ public ContentValues build() { } public enum Race { - OTHER("Other"), - AM_IND_AK_NATIVE("American Indian / Alaskan Native"), - ASIAN_PACIFIC_ISLANDER("Asian / Pacific Islander"), - BLACK("Black (not Hispanic)"), - HISPANIC("Hispanic"), - MULTI_RACIAL("Multi-Racial"), - WHITE("White (Not Hispanic)"), - DECLINE("Decline to state"); + OTHER("Other", "OTRO"), + AM_IND_AK_NATIVE("American Indian / Alaskan Native", "Nativoamericano"), + ASIAN_PACIFIC_ISLANDER("Asian / Pacific Islander", "Asiatico"), + BLACK("Black (not Hispanic)", "Afroamericano"), + HISPANIC("Hispanic", "Hispano"), + MULTI_RACIAL("Multi-Racial", "Multi"), + WHITE("White (Not Hispanic)", "Anglosajón"), + DECLINE("Decline to state", "Rechazar"); - private final String race; + private final String enRace; + private final String esRace; - Race(String race) { - this.race = race; + Race(String enRace, String esRace) { + this.enRace = enRace; + this.esRace = esRace; } @Override public String toString() { - return race; + if ("es".equals(Locale.getDefault().getLanguage())) { + return esRace; + } else { + // default to english + return enRace; + } } public static Race fromString(String race) { for (Race val : values()) { - if (val.toString().equals(race)) { + if (val.enRace.equals(race) || + val.esRace.equals(race)) { return val; } } @@ -317,25 +326,33 @@ public static Race fromString(String race) { } public enum Party { - DEMOCRATIC("Democratic"), - REPUBLICAN("Republican"), - NO_PARTY("none"), - OTHER_PARTY("Other"); + DEMOCRATIC("Democratic", "Demócrata"), + REPUBLICAN("Republican", "Republicano"), + NO_PARTY("None", "Ninguno"), + OTHER_PARTY("Other", "Otro"); - private final String party; + private final String enParty; + private final String esParty; - Party(String party) { - this.party = party; + Party(String enParty, String esParty) { + this.enParty = enParty; + this.esParty = esParty; } @Override public String toString() { - return party; + if ("es".equals(Locale.getDefault().getLanguage())) { + return esParty; + } else { + // default to english + return enParty; + } } public static Party fromString(String party) { for (Party val : values()) { - if (val.toString().equals(party)) { + if (val.enParty.equals(party) || + val.esParty.equals(party)) { return val; } } @@ -373,23 +390,33 @@ public static Status fromString(String status) { } public enum PhoneType { - MOBILE("Mobile"), HOME("Home"), WORK("Work"); + MOBILE("Mobile", "Móvil"), + HOME("Home", "Casa"), + WORK("Work", "Trabajo"); - private final String phoneType; + private final String enPhoneType; + private final String esPhoneType; - PhoneType(String phoneType) { - this.phoneType = phoneType; + PhoneType(String enPhoneType, String esPhoneType) { + this.enPhoneType = enPhoneType; + this.esPhoneType = esPhoneType; } @Override public @NonNull String toString() { - return phoneType; + if ("es".equals(Locale.getDefault().getLanguage())) { + return esPhoneType; + } else { + // default to english + return enPhoneType; + } } @NonNull public static PhoneType fromString(String phoneType) { for (PhoneType value : PhoneType.values()) { - if (value.phoneType.equals(phoneType)) { + if (value.enPhoneType.equals(phoneType) || + value.esPhoneType.equals(phoneType)) { return value; } } diff --git a/app/src/main/java/com/rockthevote/grommet/ui/registration/RegistrationActivity.java b/app/src/main/java/com/rockthevote/grommet/ui/registration/RegistrationActivity.java index 17cadaa6..55502677 100644 --- a/app/src/main/java/com/rockthevote/grommet/ui/registration/RegistrationActivity.java +++ b/app/src/main/java/com/rockthevote/grommet/ui/registration/RegistrationActivity.java @@ -20,8 +20,11 @@ import com.rockthevote.grommet.ui.ViewContainer; import com.rockthevote.grommet.ui.misc.StepperTabLayout; import com.rockthevote.grommet.util.KeyboardUtil; +import com.rockthevote.grommet.util.LocaleUtils; import com.squareup.sqlbrite.BriteDatabase; +import java.util.Locale; + import javax.inject.Inject; import butterknife.BindView; @@ -52,6 +55,10 @@ public class RegistrationActivity extends BaseActivity { private KeyboardUtil keyboardUtil; + public RegistrationActivity() { + LocaleUtils.updateConfig(this); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -115,6 +122,14 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.action_cancel: showCancelDialog(); return true; + case R.id.action_english: + LocaleUtils.setLocale(new Locale("en")); + recreate(); + return true; + case R.id.action_espanol: + LocaleUtils.setLocale(new Locale("es")); + recreate(); + return true; default: return super.onOptionsItemSelected(item); } @@ -137,6 +152,7 @@ private void showCancelDialog() { RockyRequest._ID + " = ? ", String.valueOf(rockyRequestRowId.get())); + LocaleUtils.setLocale(new Locale("en")); finish(); })) diff --git a/app/src/main/java/com/rockthevote/grommet/ui/registration/ReviewAndConfirmFragment.java b/app/src/main/java/com/rockthevote/grommet/ui/registration/ReviewAndConfirmFragment.java index 1fc73169..0af5971a 100644 --- a/app/src/main/java/com/rockthevote/grommet/ui/registration/ReviewAndConfirmFragment.java +++ b/app/src/main/java/com/rockthevote/grommet/ui/registration/ReviewAndConfirmFragment.java @@ -24,10 +24,12 @@ import com.rockthevote.grommet.data.prefs.EventRegTotal; import com.rockthevote.grommet.util.Dates; import com.rockthevote.grommet.util.Images; +import com.rockthevote.grommet.util.LocaleUtils; import com.squareup.sqlbrite.BriteDatabase; import java.io.ByteArrayOutputStream; import java.util.List; +import java.util.Locale; import javax.inject.Inject; @@ -252,6 +254,8 @@ public void onRegisterClick(View v) { RegistrationCompleteDialogFragment dialog = new RegistrationCompleteDialogFragment(); dialog.setCancelable(false); dialog.show(getFragmentManager(), "complete_dialog"); + + LocaleUtils.setLocale(new Locale("en")); } else { signaturePadError.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/com/rockthevote/grommet/util/LocaleUtils.java b/app/src/main/java/com/rockthevote/grommet/util/LocaleUtils.java new file mode 100644 index 00000000..c162c16a --- /dev/null +++ b/app/src/main/java/com/rockthevote/grommet/util/LocaleUtils.java @@ -0,0 +1,27 @@ +package com.rockthevote.grommet.util; + +import android.content.res.Configuration; +import android.os.Build; +import android.view.ContextThemeWrapper; + +import java.util.Locale; + +public class LocaleUtils { + + private static Locale sLocale; + + public static void setLocale(Locale locale) { + sLocale = locale; + if (sLocale != null) { + Locale.setDefault(sLocale); + } + } + + public static void updateConfig(ContextThemeWrapper wrapper) { + if (sLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + Configuration configuration = new Configuration(); + configuration.setLocale(sLocale); + wrapper.applyOverrideConfiguration(configuration); + } + } +} diff --git a/app/src/main/res/menu/registration.xml b/app/src/main/res/menu/registration.xml index a0972644..601b51e1 100644 --- a/app/src/main/res/menu/registration.xml +++ b/app/src/main/res/menu/registration.xml @@ -8,11 +8,11 @@ app:showAsAction="always"> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 00000000..990061fb --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,210 @@ + + + + + Total Registered + Registered + New Voter + Event Details + Invalid Partner ID + Validating Partner ID + + + ¿Cancelar esta registración? + + No + anterior + próximas + + + Nombre + Soy ciudadano de los Estados Unidos. + Tendré por lo menos 18 años en la fecha de las siguientes elecciones. + Tengo una licencia de conducir de Pennsylvania. + Si es la primera vez que se inscribe para votar. + Titulo + Nombre + Segundo nombr + Apellido + Sufijo + Sufijo + + Fecha de nacimiento + Elegibilidad + Información Básica + Nueva Inscripción + Tendré por lo menos 18 años en la fecha de las siguientes elecciones. + Soy ciudadano de los Estados Unidos. + Dirección de email no es correcto + + + + Dirección + Información de la Dirección + el Nombre + Nombre anterior + Dirección de Residencia + Dirección Postal + Dirección Anterior + Número de teléfono + Dirección + Ciudad + Código postal + Estado + Unidad Número + Condado donde vive + Consigo mi correo desde una dirección diferente a la de arriba. + He cambiado mi dirección. + I would like to receive a copy of my voter registration in the mail + He cambiado mi nombre. + Estoy de acuerdo que puede llamar a %s y texto con actualizaciones importantes y recordatorios. + Condado donde vive es obligatorio + No tengo dirección normal ni dirección permanente + Completa registro mediante formulario en papel + código postal no válido + + + Personal + Asistencia + Sexo + Raza + Partido Político + La Verificación + Masculino + Femenino + Firme aquí + Registrar + He leido la \u0020 + Voter Registration Agreement + Terminado + Inscripción de Votantes Acuerdo + + + Idioma de Preferencia + Número de Licencia de Conducir de PA + Otro Partido Político + No sé mi número de PennDOT + Los últimos 4 dígitos de su número de seguro social + No sé mi número de los últimos 4 dígitos de su número de seguro social + Idioma preferido para recibir los materiales electorales + Información de las Elecciones + Ingrese el número de licencia de conducir de PA o de identificación PennDOT, los últimos cuatro dígitos de su número de seguro social. + Marque \"no sé\" si no sabes su de identificación PennDOT + Si no cuenta con un número PennDOT, ingrese los últimos 4 dígitos de su número de seguro social. + Marque \"no sé\" si no sabes los últimos cuatro dígitos de su número de seguro social. + ¿Alguien se ayudó con este formulario? + Ayudante Nombre + Ayudante Dirección + Información de Contacto de Ayudante + El número de teléfono que ingresó no es válido. + Dirección de Email + Número de Teléfono + Tipo + "Doy permiso a %s para enviarme noticias y actualizaciones + Español + + Enviar correo electrónico para permitir que Departamento de Estado de Pennsylvania le enviará un mensaje confirmando la recepción de su solicitud de registro de votante: + \n + \n + \u2022 Por favor tenga en cuenta que este correo electrónico puede tardar hasta 24 horas en llegar a usted." + + + Si usted ayudó a un votante a llenar esta solicitud de inscripción de votante, también debe firmar la solicitud. Marcar la casilla significa que usted está firmando electrónicamente la solicitud. +\n +\n +Al hacerlo: +\n +\n +\u2022 Afirma que entiende que su firma electrónica en esta solicitud constituye el equivalente legal de su firma. +\n +\n +\u2022 Afirma que acepta firmar esta solicitud a través de medios electrónicos y que se aplicarán todas las leyes del estado Pennsylvania. + + CONFIRMO QUE LEÍ Y QUE ACEPTO LOS TÉRMINOS ANTERIORES. + + + Revisar + He revisado la información anterior, y es verdad y exacta a lo mejor de mi conocimiento. + La Configuración + {title} {first_name} {middle_name} {last_name} {suffix} + Información de Contacto + Por favor revise la siguiente información y confirmar su exactitud. + Su Firma + Por favor, use la lapicera electrónica para la captura de firmas + Firma es necesaria + Cancelar la Inscripción + Su inscripción estará completa + Declaración / Sancaón + +\n +\u2022 Su solicitud se ha enviado a la oficina de registro de votantes del condado. +\n +\n +\u2022 Su inscripción no estará completa hasta que sea procesada y aceptada por la oficina de inscripción de su condado. +\n +\n +\u2022 Si acepta, recibirá su Tarjeta de Inscripción de Votante por correo. +\n +\n +\u2022 Si en 14 días no ha recibido su Tarjeta de Inscripción de Votante, llame a su oficina de inscripción de votantes. +\n +\n +Atención: La fecha límite para inscribirse y poder votar en las próximas elecciones 10/11/2016 es 11/8/2016. + + + +Declaro que +

+
    +
  1. +Soy ciudadano de los Estados Unidos y habré sido ciudadano por lo menos 1 mes antes de la fecha de las siguientes elecciones. +
  2. +
  3. +Tendré por lo menos 18 años en la fecha de las siguientes elecciones. +
  4. +
  5. +Habré vivido en este dirección al menos durante 30 días antes de las próximas elecciones. +
  6. +
  7. +Cumplo con los requisitos legales para votar. +
  8. +
+

+Lo declarado anteriormente es verdadero. Entiendo que esta declaración es una declaración jurada y si la información no es verdadera seré acusado(a) de perjurio y sentenciado(a) a prisión durante 7 años o a pagar una multa máxima de $15,000, o ambos. + +Marcar la casilla de abajo significa que usted está firmando la solicitud electrónicamente. Al hacerlo: +

+

    +
  1. +Afirma que leyó y que acepta los términos de la declaración anterior. +
  2. +
  3. +Afirma que entiende que su firma electrónica en esta solicitud constituye el equivalente legal de su firma para esta solicitud de inscripción de votante. +
  4. +
  5. +Afirma que acepta hacer la transacción de la inscripción de votante a través de medios electrónicos y que entiende que todas las leyes de Pennsylvania se aplicarán a esta transacción. +
  6. +
+

+Si proporcionó su número de licencia de conducir de PA o de identificación de PennDOT, afirma que entiende que la firma que figura en su registro PennDOT constituirá su firma en el registro de inscripción de votante. Si usted sube una imagen de su firma, comprende que la firma que sube representará su firma en su archivo de inscripción de elector. Afirma que entiende que no es obligatorio inscribirse electrónicamente y que puede usar un formulario impreso o no electrónico para su solicitud de inscripción como votante. +

+

+SANCIÓN POR DECLARACIÓN FALSA +

+

+Advertencia: si una persona firma una solicitud de inscripción oficial sabiendo que algo de lo que declaró en la solicitud es falso, hace una inscripción falsa o proporciona información falsa, esa persona comete perjurio. Si se comprueba que cometió delito de perjurio será castigado con prisión máxima de siete años, o una multa máxima de $15,000, o ambos, a discreción del tribunal. +

+

+Presentar una solicitud con datos falsos también puede estar sujeto a otras sanciones, incluso pérdida del derecho al voto según las leyes estatales o federales. +

+]]> +
+ + + + Okay + Aceptar + Rechazar +
\ No newline at end of file diff --git a/app/src/main/res/values/open_source_licenses.xml b/app/src/main/res/values/open_source_licenses.xml index 87149210..c84a68cb 100644 --- a/app/src/main/res/values/open_source_licenses.xml +++ b/app/src/main/res/values/open_source_licenses.xml @@ -2,7 +2,7 @@ Open Source Licenses - + Copyright 2013 Square, Inc.\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -18,7 +18,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2013 Jake Wharton\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -34,7 +34,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2013 Google, Inc.\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -50,7 +50,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2015 Square, Inc.\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -66,7 +66,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright © 2015 Jake Wharton\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -82,7 +82,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2014-2016 Gianluca Cacace\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -98,7 +98,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2013 Netflix, Inc.\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -114,7 +114,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright © 2015 Michał Charmas (http://blog.charmas.pl)\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -130,7 +130,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2014 Prateek Srivastava\n \n Licensed under the Apache License, Version 2.0 (the "License");\n @@ -146,7 +146,7 @@ See the License for the specific language governing permissions and\n limitations under the License.\n - + Copyright 2012 - 2015 Mobs & Geeks\n \n Licensed under the Apache License, Version 2.0 (the "License");\n diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85640c4a..0b6513a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ - PA OVR APP + PA OVR APP - + There are no applications available to handle this action. @@ -9,20 +9,20 @@ next - Home - About - Data Usage - Help + Home + About + Data Usage + Help Some of your canvasser information is incomplete. You must enter your name, Partner ID, Event ID and Event Zip before registering voters No Thanks Enter Info - Total Registered + Total Registered Registered - New Voter - Event Details - Invalid Partner ID + New Voter + Event Details + Invalid Partner ID Validating Partner ID @@ -65,11 +65,10 @@ City Zip Code State - Unit # + Unit # County I get my mail from a different address from the one above I have changed my address - I would like to receive a copy of my voter registration in the mail I have changed my name I agree that %s/Pennsylvania Voice/State Voices may call and text me with important updates and reminders County Required @@ -141,7 +140,6 @@ In doing so: Review I have reviewed the above information, and it is true and accurate to the best of my knowledge. Settings - {title} {first_name} {middle_name} {last_name} {suffix} Contact Info Please review the following information and confirm its accuracy. Signature @@ -180,7 +178,7 @@ I am a United States citizen and will have been a citizen for at least 1 month o I will be at least 18 years old on the day of the next election.
  • -I will have lived at the address in section 5 for at least 30 days before the election. +I will have lived at this address for at least 30 days before the election.
  • I am legally qualified to vote. @@ -218,35 +216,34 @@ Submitting an application containing false information may also subject a person - partner_id - partner_name - canvasser_name - event_zip - event_name - event_reg_total - app_reg_total + partner_id + partner_name + canvasser_name + event_zip + event_name + event_reg_total + app_reg_total - Partner Name - Partner ID - Canvaser Name - Event Zip Code - Event Name + Partner Name + Partner ID + Canvaser Name + Event Zip Code + Event Name Cancel Save - Edit OK Accept Decline - PA Registration Success - PA Registration Failed - Registration submitted - Bad registration data - Unable to contact server + PA Registration Success + PA Registration Failed + Registration submitted + Bad registration data + Unable to contact server - + @@ -279,7 +276,7 @@ outcomes. ]]> - + @@ -322,7 +319,7 @@ ensure its security on our systems. ]]> - +      If you have any questions about this app or its data usage policy please contact