From 1dc5711d41afb2ec40881988abd4c827838758f4 Mon Sep 17 00:00:00 2001 From: Daniel Santana Date: Sun, 19 Jan 2025 10:21:35 +0000 Subject: [PATCH 1/4] feat: add Portuguese (Portugal) locale support --- fake/src/locales/mod.rs | 3 + fake/src/locales/pt_pt.rs | 765 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 768 insertions(+) create mode 100644 fake/src/locales/pt_pt.rs diff --git a/fake/src/locales/mod.rs b/fake/src/locales/mod.rs index ff28010..4313b6a 100644 --- a/fake/src/locales/mod.rs +++ b/fake/src/locales/mod.rs @@ -224,5 +224,8 @@ pub use self::ar_sa::AR_SA; mod pt_br; pub use self::pt_br::PT_BR; +mod pt_pt; +pub use self::pt_pt::PT_PT; + mod de_de; pub use self::de_de::DE_DE; diff --git a/fake/src/locales/pt_pt.rs b/fake/src/locales/pt_pt.rs new file mode 100644 index 0000000..5163a8b --- /dev/null +++ b/fake/src/locales/pt_pt.rs @@ -0,0 +1,765 @@ +use crate::{faker::impls::address::CityNameGenFn, locales::Data}; + +#[allow(non_camel_case_types)] +#[derive(Copy, Clone)] +pub struct PT_PT; + +impl Data for PT_PT { + const NAME_FIRST_NAME: &'static [&'static str] = &[ + "Abel", + "Adriana", + "Adriano", + "Alberto", + "Alexandra", + "Alexandre", + "Ana", + "André", + "António", + "Artur", + "Beatriz", + "Bruno", + "Carla", + "Carlos", + "Carolina", + "Catarina", + "Cristina", + "Daniel", + "David", + "Diana", + "Diogo", + "Eduardo", + "Fernando", + "Filipa", + "Francisco", + "Gonçalo", + "Guilherme", + "Helena", + "Hugo", + "Inês", + "Isabel", + "João", + "Jorge", + "José", + "Leonor", + "Lia", + "Liliana", + "Luís", + "Manuel", + "Margarida", + "Maria", + "Mário", + "Miguel", + "Nuno", + "Paulo", + "Pedro", + "Rafael", + "Ricardo", + "Rita", + "Rosa", + "Rui", + "Sara", + "Sofia", + "Teresa", + "Tiago", + "Tomás", + "Vasco", + "Afonso", + "Alice", + "Amélia", + "Bernardo", + "Clara", + "Dinis", + "Duarte", + "Eva", + "Gabriel", + "Gustavo", + "Íris", + "Joana", + "Joaquim", + "Laura", + "Lucas", + "Luísa", + "Madalena", + "Mafalda", + "Martim", + "Matilde", + "Melissa", + "Nicole", + "Noa", + "Rafaela", + "Raquel", + "Rodrigo", + "Salvador", + "Santiago", + "Simão", + "Vicente", + ]; + + const NAME_LAST_NAME: &'static [&'static str] = &[ + "Abreu", + "Almeida", + "Alves", + "Araújo", + "Azevedo", + "Barbosa", + "Barros", + "Batista", + "Borges", + "Branco", + "Caldas", + "Campos", + "Cardoso", + "Carvalho", + "Castro", + "Coelho", + "Correia", + "Costa", + "Cruz", + "Cunha", + "Dias", + "Domingues", + "Esteves", + "Faria", + "Fernandes", + "Ferreira", + "Figueiredo", + "Freitas", + "Garcia", + "Gaspar", + "Gomes", + "Gonçalves", + "Guerra", + "Henriques", + "Jesus", + "Leal", + "Lima", + "Lopes", + "Lourenço", + "Machado", + "Magalhães", + "Marques", + "Martins", + "Matos", + "Melo", + "Mendes", + "Meireles", + "Miranda", + "Monteiro", + "Morais", + "Moreira", + "Mota", + "Nunes", + "Oliveira", + "Pacheco", + "Paiva", + "Pascoal", + "Paixão", + "Pereira", + "Pinheiro", + "Pinto", + "Pires", + "Ramos", + "Reis", + "Ribeiro", + "Rocha", + "Rodrigues", + "Rosa", + "Santos", + "Santana", + "Saraiva", + "Silva", + "Simões", + "Soares", + "Sousa", + "Teixeira", + "Vaz", + "Vicente", + "Abrantes", + "Aguiar", + "Amaral", + "Antunes", + "Baptista", + "Barreto", + "Bessa", + "Carneiro", + "Carreira", + "Coutinho", + "Duarte", + "Fonseca", + "Godinho", + "Guerreiro", + "Leite", + "Macedo", + "Nascimento", + "Neto", + "Nogueira", + "Pais", + "Queirós", + "Ramos", + "Raposo", + "Salgueiro", + "Sampaio", + "Sequeira", + "Tavares", + "Vale", + "Valente", + "Vieira", + ]; + + const INTERNET_FREE_EMAIL_PROVIDER: &'static [&'static str] = &[ + "gmail.com", + "hotmail.com", + "yahoo.com", + "sapo.pt", + "netcabo.pt", + "clix.pt", + "iol.pt", + "live.com", + "meo.pt", + "outlook.com", + "portugalmail.pt", + "icloud.com", + ]; + const INTERNET_DOMAIN_SUFFIX: &'static [&'static str] = &["pt", "com", "net", "org"]; + + const PHONE_NUMBER_FORMATS: &'static [&'static str] = &[ + "+351 2## ### ####", + "+351 2## #######", + "+351 9## ### ####", + "+351 9## #######", + ]; + const PHONE_CELL_NUMBER_FORMATS: &'static [&'static str] = &[ + "+351 91# ### ####", + "+351 92# ### ####", + "+351 93# ### ####", + "+351 96# ### ####", + ]; + + const CHRONO_DEFAULT_TIME_FORMAT: &'static str = "%H:%M:%S"; + const CHRONO_DEFAULT_DATE_FORMAT: &'static str = "%d-%m-%Y"; + const CHRONO_DEFAULT_DATETIME_FORMAT: &'static str = "%d-%m-%Y %H:%M:%S"; + + const TIME_DEFAULT_DATE_FORMAT: &'static str = "[day]-[month]-[year]"; + const TIME_DEFAULT_DATETIME_FORMAT: &'static str = + "[day]-[month]-[year] [hour]:[minute]:[second]"; + + const ADDRESS_BUILDING_NUMBER_FORMATS: &'static [&'static str] = &["nº ###", "nº ##", "nº #"]; + const ADDRESS_CITY_PREFIX: &'static [&'static str] = + &["Vila", "São", "Santa", "Santo", "Póvoa", "Alto"]; + const ADDRESS_CITY_SUFFIX: &'static [&'static str] = &[ + "do Castelo", + "da Feira", + "de Cima", + "de Baixo", + "de Riba", + "de Sousa", + ]; + const ADDRESS_COUNTRY: &'static [&'static str] = &[ + "Afeganistão", + "Albânia", + "Argélia", + "Samoa Americana", + "Andorra", + "Angola", + "Anguila", + "Antártida (o território a Sul de 60 graus)", + "Antígua e Barbuda", + "Argentina", + "Arménia", + "Aruba", + "Austrália", + "Áustria", + "Azerbaijão", + "Bahamas", + "Bahrein", + "Bangladesh", + "Barbados", + "Bielorrússia", + "Bélgica", + "Belize", + "Benim", + "Bermudas", + "Butão", + "Bolívia", + "Bósnia e Herzegovina", + "Botswana", + "Ilha Bouvet", + "Brasil", + "Território Britânico do Oceano Índico", + "Brunei", + "Bulgária", + "Burkina Faso", + "Burundi", + "Camboja", + "Camarões", + "Canadá", + "Cabo Verde", + "Ilhas Cayman", + "República Centro-Africana", + "Chade", + "Chile", + "China", + "Ilha Christmas", + "Ilhas Cocos (Keeling)", + "Colômbia", + "Comores", + "Congo", + "Ilhas Cook", + "Costa Rica", + "Costa do Marfim", + "Croácia", + "Cuba", + "Chipre", + "República Checa", + "Dinamarca", + "Djibuti", + "Dominica", + "República Dominicana", + "Equador", + "Egito", + "El Salvador", + "Guiné Equatorial", + "Eritreia", + "Estónia", + "Etiópia", + "Ilhas Faroé", + "Ilhas Malvinas", + "Fiji", + "Finlândia", + "França", + "Guiana Francesa", + "Polinésia Francesa", + "Terras Austrais e Antárticas Francesas", + "Gabão", + "Gâmbia", + "Geórgia", + "Alemanha", + "Gana", + "Gibraltar", + "Grécia", + "Gronelândia", + "Granada", + "Guadalupe", + "Guam", + "Guatemala", + "Guernsey", + "Guiné", + "Guiné-Bissau", + "Guiana", + "Haiti", + "Ilha Heard e Ilhas McDonald", + "Cidade do Vaticano", + "Honduras", + "Hong Kong", + "Hungria", + "Islândia", + "Índia", + "Indonésia", + "Irão", + "Iraque", + "Irlanda", + "Ilha de Man", + "Israel", + "Itália", + "Jamaica", + "Japão", + "Jersey", + "Jordânia", + "Cazaquistão", + "Quénia", + "Kiribati", + "Coreia do Norte", + "Coreia do Sul", + "Kuwait", + "Quirguistão", + "Laos", + "Letónia", + "Líbano", + "Lesoto", + "Libéria", + "Líbia", + "Liechtenstein", + "Lituânia", + "Luxemburgo", + "Macau", + "Macedónia", + "Madagáscar", + "Malawi", + "Malásia", + "Maldivas", + "Mali", + "Malta", + "Ilhas Marshall", + "Martinica", + "Mauritânia", + "Maurícia", + "Mayotte", + "México", + "Micronésia", + "Moldávia", + "Mónaco", + "Mongólia", + "Montenegro", + "Montserrat", + "Marrocos", + "Moçambique", + "Myanmar", + "Namíbia", + "Nauru", + "Nepal", + "Antilhas Holandesas", + "Países Baixos", + "Nova Caledónia", + "Nova Zelândia", + "Nicarágua", + "Níger", + "Nigéria", + "Niue", + "Ilha Norfolk", + "Ilhas Marianas do Norte", + "Noruega", + "Omã", + "Paquistão", + "Palau", + "Palestina", + "Panamá", + "Papua Nova Guiné", + "Paraguai", + "Peru", + "Filipinas", + "Ilhas Pitcairn", + "Polónia", + "Portugal", + "Porto Rico", + "Qatar", + "Reunião", + "Roménia", + "Rússia", + "Ruanda", + "São Bartolomeu", + "Santa Helena", + "São Cristóvão e Neves", + "Santa Lúcia", + "São Martinho", + "São Pedro e Miquelão", + "São Vicente e Granadinas", + "Samoa", + "São Marino", + "São Tomé e Príncipe", + "Arábia Saudita", + "Senegal", + "Sérvia", + "Seychelles", + "Serra Leoa", + "Singapura", + "Eslováquia", + "Eslovénia", + "Ilhas Salomão", + "Somália", + "África do Sul", + "Geórgia do Sul e Sandwich do Sul", + "Espanha", + "Sri Lanka", + "Sudão", + "Suriname", + "Svalbard e Jan Mayen", + "Suazilândia", + "Suécia", + "Suíça", + "Síria", + "Taiwan", + "Tajiquistão", + "Tanzânia", + "Tailândia", + "Timor-Leste", + "Togo", + "Tokelau", + "Tonga", + "Trinidad e Tobago", + "Tunísia", + "Turquia", + "Turquemenistão", + "Ilhas Turcas e Caicos", + "Tuvalu", + "Uganda", + "Ucrânia", + "Emirados Árabes Unidos", + "Reino Unido", + "Estados Unidos", + "Ilhas Menores Distantes dos Estados Unidos", + "Uruguai", + "Uzbequistão", + "Vanuatu", + "Venezuela", + "Vietname", + "Ilhas Virgens Britânicas", + "Ilhas Virgens Americanas", + "Wallis e Futuna", + "Saara Ocidental", + "Iémen", + "Zâmbia", + "Zimbabué", + ]; + const ADDRESS_SECONDARY_ADDR_TYPE: &'static [&'static str] = &["Apt.", "Suite", "Piso"]; + const ADDRESS_STATE: &'static [&'static str] = &[ + "Aveiro", + "Beja", + "Braga", + "Bragança", + "Castelo Branco", + "Coimbra", + "Évora", + "Faro", + "Guarda", + "Leiria", + "Lisboa", + "Portalegre", + "Porto", + "Santarém", + "Setúbal", + "Viana do Castelo", + "Vila Real", + "Viseu", + "Madeira", + "Açores", + ]; + const ADDRESS_STATE_ABBR: &'static [&'static str] = &[ + "AV", "BJ", "BR", "BG", "CB", "CM", "ÉV", "FR", "GD", "LR", "LS", "PA", "PO", "ST", "SV", + "VC", "VR", "VS", "MD", "AC", + ]; + const ADDRESS_STREET_SUFFIX: &'static [&'static str] = &[ + "Alameda", "Avenida", "Calçada", "Estrada", "Largo", "Praça", "Rua", "Travessa", + ]; + const ADDRESS_STREET_TPL: &'static str = "{StreetSuffix} {FirstName} {LastName}"; + const ADDRESS_TIME_ZONE: &'static [&'static str] = + &["Atlantic/Azores", "Atlantic/Madeira", "Europe/Lisbon"]; + const ADDRESS_ZIP_FORMATS: &'static [&'static str] = &["####-###"]; + const ADDRESS_POSTCODE_FORMATS: &'static [&'static str] = &["####-###"]; + + // Add currency related constants + const CURRENCY_NAME: &'static [&'static str] = &[ + "Euro", + "Dólar Americano", + "Libra Esterlina", + "Iene", + "Franco Suíço", + "Dólar Australiano", + "Dólar Canadiano", + "Yuan Chinês", + "Real Brasileiro", + "Peso Mexicano", + ]; + + const CURRENCY_CODE: &'static [&'static str] = &[ + "EUR", "USD", "GBP", "JPY", "CHF", "AUD", "CAD", "CNY", "BRL", "MXN", + ]; + + const CURRENCY_SYMBOL: &'static [&'static str] = + &["€", "$", "£", "¥", "Fr.", "A$", "C$", "¥", "R$", "$"]; + + // Add company related constants + const COMPANY_SUFFIX: &'static [&'static str] = &[ + "S.A.", + "Lda.", + "SGPS", + "e Filhos", + "Unipessoal", + "Sociedade Unipessoal", + "Group", + ]; + + const NAME_TITLE: &'static [&'static str] = &[ + "Sr.", "Sra.", "Dr.", "Dra.", "Eng.", "Engª.", "Prof.", "Profª.", + ]; + const NAME_SUFFIX: &'static [&'static str] = &["Jr.", "Filho", "Neto"]; + const NAME_TPL: &'static str = "{FirstName} {LastName}"; + const NAME_WITH_TITLE_TPL: &'static str = "{Title} {FirstName} {LastName}"; + + const JOB_SENIORITY: &'static [&'static str] = &[ + "Principal", + "Sénior", + "Júnior", + "Corporativo", + "Nacional", + "Regional", + "Distrital", + "Central", + "Global", + "Internacional", + "Chefe", + ]; + + const JOB_FIELD: &'static [&'static str] = &[ + "Marketing", + "Informática", + "Contabilidade", + "Administração", + "Publicidade", + "Banca", + "Serviços Comunitários", + "Construção", + "Consultoria", + "Design", + "Educação", + "Agricultura", + "Governo", + "Saúde", + "Hotelaria", + "Jurídico", + "Indústria", + "Mineração", + "Imobiliário", + "Retalho", + "Vendas", + "Tecnologia", + ]; + + const JOB_POSITION: &'static [&'static str] = &[ + "Supervisor", + "Associado", + "Executivo", + "Coordenador", + "Oficial", + "Gerente", + "Engenheiro", + "Especialista", + "Diretor", + "Administrador", + "Arquiteto", + "Analista", + "Designer", + "Planeador", + "Técnico", + "Desenvolvedor", + "Produtor", + "Consultor", + "Assistente", + "Facilitador", + "Agente", + "Representante", + "Estrategista", + ]; + + const JOB_TITLE_TPL: &'static str = "{Seniority} {Field} {Position}"; + + const ADDRESS_CITY_TPL: &'static str = "{CityName} {CitySuffix}"; + const ADDRESS_CITY_WITH_PREFIX_TPL: &'static str = "{CityPrefix} {CityName} {CitySuffix}"; + const ADDRESS_SECONDARY_ADDR_TPL: &'static str = "{SecondaryAddrType} {Number}"; + + const COMPANY_NAME_TPLS: &'static [&'static str] = + &["{Name_1} {Suffix}", "{Name_1} e {Name_2} {Suffix}"]; + const COMPANY_BUZZWORD_HEAD: &'static [&'static str] = &[ + "Adaptável", + "Avançado", + "Automatizado", + "Centralizado", + "Compatível", + "Configurável", + "Digital", + "Distribuído", + "Diversificado", + "Exclusivo", + "Expandido", + "Focado", + "Fundamental", + "Inovador", + "Integrado", + "Intuitivo", + "Otimizado", + "Organizado", + "Progressivo", + "Robusto", + "Versátil", + "Virtual", + ]; + + const COMPANY_BUZZWORD_MIDDLE: &'static [&'static str] = &[ + "24 horas", + "global", + "digital", + "dinâmico", + "empresarial", + "eficiente", + "flexível", + "integrado", + "inovador", + "inteligente", + "móvel", + "proativo", + "profissional", + "regional", + "responsivo", + "sustentável", + "tecnológico", + ]; + + const COMPANY_BUZZWORD_TAIL: &'static [&'static str] = &[ + "solução", + "serviço", + "sistema", + "estratégia", + "tecnologia", + "metodologia", + "arquitetura", + "infraestrutura", + "aplicação", + "interface", + "iniciativa", + "plataforma", + "abordagem", + "inovação", + "paradigma", + "visão", + ]; + + const COMPANY_CATCH_PHASE_TPL: &'static str = "{Head} {Middle} {Tail}"; + + const COMPANY_BS_VERBS: &'static [&'static str] = &[ + "implementar", + "utilizar", + "integrar", + "otimizar", + "evoluir", + "transformar", + "desenvolver", + "inovar", + "liderar", + "maximizar", + "potenciar", + "expandir", + ]; + + const COMPANY_BS_ADJ: &'static [&'static str] = &[ + "eficiente", + "proativo", + "robusto", + "revolucionário", + "escalável", + "inovador", + "intuitivo", + "estratégico", + "integrado", + "digital", + "dinâmico", + "global", + ]; + + const COMPANY_BS_NOUNS: &'static [&'static str] = &[ + "sinergias", + "soluções", + "paradigmas", + "mercados", + "parcerias", + "infraestruturas", + "plataformas", + "iniciativas", + "canais", + "comunidades", + "tecnologias", + "metodologias", + ]; + + const COMPANY_BS_TPL: &'static str = "{Verb} {Adj} {Noun}"; +} + +impl CityNameGenFn for PT_PT {} \ No newline at end of file From d448db4e0203dca372ff94826142d0902195072c Mon Sep 17 00:00:00 2001 From: Daniel Santana Date: Sun, 19 Jan 2025 10:28:26 +0000 Subject: [PATCH 2/4] feat: add Portuguese (Portugal) locale support --- fake/src/faker/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/fake/src/faker/mod.rs b/fake/src/faker/mod.rs index 046a567..e327a5c 100644 --- a/fake/src/faker/mod.rs +++ b/fake/src/faker/mod.rs @@ -42,6 +42,7 @@ macro_rules! def_fakers { def_fakers!(@m ar_sa=>AR_SA {$($name$(< $($lts),* >)?($($arg:$typ),*);)+}); def_fakers!(@m ja_jp=>JA_JP {$($name$(< $($lts),* >)?($($arg:$typ),*);)+}); def_fakers!(@m pt_br=>PT_BR {$($name$(< $($lts),* >)?($($arg:$typ),*);)+}); + def_fakers!(@m pt_pt=>PT_PT {$($name$(< $($lts),* >)?($($arg:$typ),*);)+}); def_fakers!(@m de_de=>DE_DE {$($name$(< $($lts),* >)?($($arg:$typ),*);)+}); }; From 0ec54ba00561b9e62001126cea8afd29d2e1704d Mon Sep 17 00:00:00 2001 From: Daniel Santana Date: Sun, 19 Jan 2025 10:40:38 +0000 Subject: [PATCH 3/4] feat: add Portuguese (Portugal) locale support for automotive data --- fake/src/faker/impls/automotive.rs | 4 ++-- fake/src/locales/pt_pt.rs | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fake/src/faker/impls/automotive.rs b/fake/src/faker/impls/automotive.rs index 8416f76..2638e3f 100644 --- a/fake/src/faker/impls/automotive.rs +++ b/fake/src/faker/impls/automotive.rs @@ -1,5 +1,5 @@ use crate::faker::automotive::raw::*; -use crate::locales::FR_FR; +use crate::locales::{FR_FR, PT_PT}; use crate::{Dummy, Fake}; use rand::prelude::SliceRandom; use rand::Rng; @@ -18,7 +18,7 @@ const LICENSE_CHARS: [char; 23] = [ ]; #[inline] -fn numerify_licence_plate(string: &str, rng: &mut R) -> String { +pub(crate) fn numerify_licence_plate(string: &str, rng: &mut R) -> String { string .chars() .map(|x| match x { diff --git a/fake/src/locales/pt_pt.rs b/fake/src/locales/pt_pt.rs index 5163a8b..04b40ed 100644 --- a/fake/src/locales/pt_pt.rs +++ b/fake/src/locales/pt_pt.rs @@ -1,4 +1,10 @@ -use crate::{faker::impls::address::CityNameGenFn, locales::Data}; +use rand::seq::SliceRandom; + +use crate::{ + faker::{automotive::raw::LicencePlate, impls::address::CityNameGenFn}, + locales::Data, + Dummy, +}; #[allow(non_camel_case_types)] #[derive(Copy, Clone)] @@ -762,4 +768,15 @@ impl Data for PT_PT { const COMPANY_BS_TPL: &'static str = "{Verb} {Adj} {Noun}"; } -impl CityNameGenFn for PT_PT {} \ No newline at end of file +impl CityNameGenFn for PT_PT {} + +const LICENSE_PLATE_PT_PT: &[&str] = &[ + "$$-##-##", "##-##-$$", "##-$$-##", "## ## $$", "## $$ ##", "$$ ## $$", +]; + +impl Dummy> for String { + fn dummy_with_rng(_: &LicencePlate, rng: &mut R) -> Self { + let fmt = LICENSE_PLATE_PT_PT.choose(rng).unwrap(); + crate::faker::impls::automotive::numerify_licence_plate(fmt, rng) + } +} From ed3a2d104f2d4e17c384821c018c0fdfd5d84e51 Mon Sep 17 00:00:00 2001 From: Daniel Santana Date: Sun, 19 Jan 2025 10:41:35 +0000 Subject: [PATCH 4/4] refactor: remove unused Portuguese (Portugal) locale import in automotive module --- fake/src/faker/impls/automotive.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fake/src/faker/impls/automotive.rs b/fake/src/faker/impls/automotive.rs index 2638e3f..39bee75 100644 --- a/fake/src/faker/impls/automotive.rs +++ b/fake/src/faker/impls/automotive.rs @@ -1,5 +1,5 @@ use crate::faker::automotive::raw::*; -use crate::locales::{FR_FR, PT_PT}; +use crate::locales::FR_FR; use crate::{Dummy, Fake}; use rand::prelude::SliceRandom; use rand::Rng;