├── .swift-version ├── Cartfile.private ├── Cartfile.resolved ├── Images └── logo.png ├── Fakery.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ ├── Fakery-tvOS.xcscheme │ ├── Fakery-iOS.xcscheme │ └── Fakery-macOS.xcscheme ├── Sources └── Fakery │ ├── Config.swift │ ├── Generators │ ├── App.swift │ ├── Team.swift │ ├── Business.swift │ ├── Company.swift │ ├── Name.swift │ ├── PhoneNumber.swift │ ├── Bank.swift │ ├── Number.swift │ ├── Lorem.swift │ ├── Commerce.swift │ ├── Generator.swift │ ├── Address.swift │ └── Internet.swift │ ├── Extensions │ └── ArrayExtension.swift │ ├── Faker.swift │ └── Data │ ├── Provider.swift │ └── Parser.swift ├── Package.swift ├── Tests └── Fakery │ ├── ConfigSpec.swift │ ├── Generators │ ├── AppSpec.swift │ ├── TeamSpec.swift │ ├── BankSpec.swift │ ├── BusinessSpec.swift │ ├── CompanySpec.swift │ ├── NameSpec.swift │ ├── PhoneNumberSpec.swift │ ├── GeneratorSpec.swift │ ├── CommerceSpec.swift │ ├── NumberSpec.swift │ ├── LoremSpec.swift │ ├── AddressSpec.swift │ └── InternetSpec.swift │ ├── Data │ ├── ProviderSpec.swift │ └── ParserSpec.swift │ └── FakerSpec.swift ├── CONTRIBUTING.md ├── .gitignore ├── .swiftlint.yml ├── .travis.yml ├── Project ├── Info-Tests-Mac.plist ├── Info-Tests-iOS.plist ├── Info-Tests-tvOS.plist ├── Info-iOS.plist ├── Info-tvOS.plist └── Info-Mac.plist ├── Fakery.podspec ├── LICENSE.md ├── Resources └── Locales │ ├── de-CH.json │ ├── en-CA.json │ ├── nl.json │ ├── en-GB.json │ ├── en-TEST.json │ ├── ja.json │ ├── ko.json │ ├── zh-CN.json │ ├── nb-NO.json │ ├── en-AU.json │ ├── en-US.json │ ├── sv.json │ └── fa.json └── README.md /.swift-version: -------------------------------------------------------------------------------- 1 | 4.0 2 | -------------------------------------------------------------------------------- /Cartfile.private: -------------------------------------------------------------------------------- 1 | github "Quick/Quick" 2 | github "Quick/Nimble" 3 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "Quick/Nimble" "v7.0.1" 2 | github "Quick/Quick" "v1.1.0" 3 | -------------------------------------------------------------------------------- /Images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Fakery/master/Images/logo.png -------------------------------------------------------------------------------- /Fakery.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Sources/Fakery/Config.swift: -------------------------------------------------------------------------------- 1 | public struct Config { 2 | public static let defaultLocale: String = "en" 3 | public static let pathExtension: String = "json" 4 | public static var dirPath: String = "Resources/Locales" 5 | public static var dirFrameworkPath: String = "" 6 | } 7 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.0 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "Fakery", 7 | products: [ 8 | .library(name: "Fakery", targets: ["Fakery"]) 9 | ], 10 | targets: [ 11 | .target(name: "Fakery") 12 | ] 13 | ) 14 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/App.swift: -------------------------------------------------------------------------------- 1 | public final class App: Generator { 2 | public func name() -> String { 3 | return generate("app.name") 4 | } 5 | 6 | public func version() -> String { 7 | return numerify(generate("app.version")) 8 | } 9 | 10 | public func author() -> String { 11 | return generate("app.author") 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Team.swift: -------------------------------------------------------------------------------- 1 | public final class Team: Generator { 2 | public func name() -> String { 3 | return generate("team.name") 4 | } 5 | 6 | public func creature() -> String { 7 | return generate("team.creature") 8 | } 9 | 10 | public func state() -> String { 11 | return generate("address.state").capitalized 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/Fakery/ConfigSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class ConfigSpec: QuickSpec { 6 | override func spec() { 7 | describe("Config") { 8 | it("has default values") { 9 | expect(Config.defaultLocale).to(equal("en")) 10 | expect(Config.dirPath).to(equal("Resources/Locales")) 11 | expect(Config.pathExtension).to(equal("json")) 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/Fakery/Extensions/ArrayExtension.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension Array { 4 | func at(_ index: Int?) -> Element? { 5 | guard let index = index, index >= 0 && index < endIndex else { 6 | return nil 7 | } 8 | 9 | return self[index] 10 | } 11 | 12 | func random() -> Element? { 13 | // swiftlint:disable empty_count 14 | guard count > 0 else { 15 | return nil 16 | } 17 | 18 | return self[Int(arc4random_uniform(UInt32(count)))] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | GitHub Issues is for reporting bugs, discussing features and general feedback in **Fakery**. Be sure to check our [documentation](http://cocoadocs.org/docsets/Fakery), [FAQ](https://github.com/vadymmarkov/Fakery/wiki/FAQ) and [past issues](https://github.com/vadymmarkov/Fakery/issues?state=closed) before opening any new issues. 2 | 3 | If you are posting about a crash in your application, a stack trace is helpful, but additional context, in the form of code and explanation, is necessary to be of any use. 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Carthage 2 | Carthage/ 3 | 4 | # OS X 5 | .DS_Store 6 | .AppleDouble 7 | .LSOverride 8 | Icon 9 | ._* 10 | .Spotlight-V100 11 | .Trashes 12 | 13 | # Xcode 14 | # 15 | build/ 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | xcuserdata 25 | *.xccheckout 26 | *.moved-aside 27 | DerivedData 28 | *.hmap 29 | *.ipa 30 | *.xcuserstate 31 | 32 | # CocoaPods 33 | Pods 34 | 35 | Packages 36 | .build 37 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Business.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Business: Generator { 4 | public func creditCardNumber() -> String { 5 | return generate("business.credit_card_numbers") 6 | } 7 | 8 | public func creditCardType() -> String { 9 | return generate("business.credit_card_types") 10 | } 11 | 12 | public func creditCardExpiryDate() -> Date? { 13 | let dateString = generate("business.credit_card_expiry_dates") 14 | return dateFormatter.date(from: dateString) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | included: 2 | - Sources 3 | - Tests 4 | excluded: 5 | - Carthage 6 | - Pods 7 | - Packages 8 | opt_in_rules: 9 | - empty_count 10 | disabled_rules: 11 | - valid_docs 12 | - type_name 13 | force_cast: warning 14 | force_try: 15 | severity: warning 16 | line_length: 120 17 | function_body_length: 18 | - 150 19 | type_body_length: 20 | warning: 300 21 | error: 400 22 | file_length: 23 | warning: 500 24 | error: 1200 25 | type_name: 26 | min_length: 3 27 | max_length: 28 | warning: 40 29 | error: 50 30 | variable_name: 31 | min_length: 2 32 | reporter: "xcode" 33 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Company.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Company: Generator { 4 | public func name() -> String { 5 | return generate("company.name") 6 | } 7 | 8 | public func suffix() -> String { 9 | return generate("company.suffix") 10 | } 11 | 12 | public func catchPhrase() -> String { 13 | return randomWordsFromKey("company.buzzwords") 14 | } 15 | 16 | public func bs() -> String { 17 | return randomWordsFromKey("company.bs") 18 | } 19 | 20 | public func logo() -> String { 21 | let number = Int(arc4random_uniform(13)) + 1 22 | return "https://pigment.github.io/fake-logos/logos/medium/color/\(number).png" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Name.swift: -------------------------------------------------------------------------------- 1 | public final class Name: Generator { 2 | public func name() -> String { 3 | return generate("name.name") 4 | } 5 | 6 | public func firstName() -> String { 7 | return generate("name.first_name") 8 | } 9 | 10 | public func lastName() -> String { 11 | return generate("name.last_name") 12 | } 13 | 14 | public func prefix() -> String { 15 | return generate("name.prefix") 16 | } 17 | 18 | public func suffix() -> String { 19 | return generate("name.suffix") 20 | } 21 | 22 | public func title() -> String { 23 | return generate("name.title.descriptor") + " " 24 | + generate("name.title.level") + " " 25 | + generate("name.title.job") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode9 2 | language: objective-c 3 | xcode_sdk: iphonesimulator10.0 4 | 5 | before_install: 6 | - brew update 7 | - if brew outdated | grep -qx carthage; then brew upgrade carthage; fi 8 | - travis_wait 35 carthage bootstrap --platform iOS,Mac 9 | 10 | script: 11 | - set -o pipefail 12 | - travis_retry xcodebuild -project Fakery.xcodeproj -scheme "Fakery-iOS" -destination "platform=iOS Simulator,name=iPhone 6" build-for-testing test | xcpretty 13 | - travis_retry xcodebuild -project Fakery.xcodeproj -scheme "Fakery-macOS" build-for-testing test | xcpretty 14 | - travis_retry xcodebuild clean build -project Fakery.xcodeproj -scheme "Fakery-tvOS" -destination 'platform=tvOS Simulator,name=Apple TV 1080p,OS=10.0' | xcpretty 15 | -------------------------------------------------------------------------------- /Project/Info-Tests-Mac.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Project/Info-Tests-iOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Project/Info-Tests-tvOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/PhoneNumber.swift: -------------------------------------------------------------------------------- 1 | public final class PhoneNumber: Generator { 2 | public func phoneNumber() -> String { 3 | return numerify(generate("phone_number.formats")) 4 | } 5 | 6 | public func cellPhone() -> String { 7 | return numerify(generate("cell_phone.formats")) 8 | } 9 | 10 | // US only 11 | public func areaCode() -> String { 12 | return generate("phone_number.area_code") 13 | } 14 | 15 | // US only 16 | public func exchangeCode() -> String { 17 | return generate("phone_number.exchange_code") 18 | } 19 | 20 | // US only 21 | public func subscriberNumber() -> String { 22 | return numerify("####") 23 | } 24 | 25 | public func numberExtension(_ length: Int) -> String { 26 | var template = "" 27 | 28 | for _ in 1...length { 29 | template += "#" 30 | } 31 | 32 | return numerify(template) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Bank.swift: -------------------------------------------------------------------------------- 1 | public final class Bank: Generator { 2 | public func name() -> String { 3 | return generate("bank.name") 4 | } 5 | 6 | public func swiftBic() -> String { 7 | return generate("bank.swiftBic") 8 | } 9 | 10 | public func iban() -> String { 11 | let bankCountryCode = generate("bank.ibanDetails.bankCountryCode") 12 | let bankCountryString = numerify("##") 13 | let ibanLetterCode = letterify(generate("bank.ibanDetails.ibanLetterCode")) 14 | let iban = numerify(generate("bank.ibanDetails.ibanDigits")) 15 | 16 | return bankCountryCode + bankCountryString + ibanLetterCode + iban 17 | } 18 | 19 | public func bban() -> String { 20 | let ibanLetterCode: String = letterify(generate("bank.ibanDetails.ibanLetterCode")) 21 | let iban: String = numerify(generate("bank.ibanDetails.ibanDigits")) 22 | 23 | return ibanLetterCode + iban 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Project/Info-iOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Project/Info-tvOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Fakery.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "Fakery" 3 | s.version = "3.3.0" 4 | s.summary = "Swift fake data generator" 5 | s.homepage = "https://github.com/vadymmarkov/Fakery" 6 | s.license = { 7 | :type => 'MIT', 8 | :file => 'LICENSE.md' 9 | } 10 | s.author = { 11 | "Vadym Markov" => "markov.vadym@gmail.com" 12 | } 13 | 14 | s.source = { 15 | :git => "https://github.com/vadymmarkov/Fakery.git", 16 | :tag => s.version.to_s 17 | } 18 | 19 | s.social_media_url = 'https://twitter.com/vadymmarkov' 20 | 21 | s.ios.deployment_target = "8.0" 22 | s.osx.deployment_target = "10.9" 23 | s.tvos.deployment_target = "9.0" 24 | s.requires_arc = true 25 | 26 | s.resource_bundles = { 27 | 'Faker' => ['Resources/Locales/*.{json}'] 28 | } 29 | 30 | s.source_files = 'Sources/**/*' 31 | s.frameworks = 'Foundation' 32 | end 33 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/AppSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class AppSpec: QuickSpec { 6 | override func spec() { 7 | describe("App") { 8 | var app: App! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | app = App(parser: parser) 13 | } 14 | 15 | describe("#name") { 16 | it("returns the correct text") { 17 | let name = app.name() 18 | expect(name).to(equal("Namfix")) 19 | } 20 | } 21 | 22 | describe("#version") { 23 | it("returns the correct text") { 24 | let version = app.version() 25 | expect(version).to(match("^0.\\d.\\d$")) 26 | } 27 | } 28 | 29 | describe("#author") { 30 | it("returns the correct text") { 31 | let author = app.author() 32 | expect(author).to(equal("Mr. Vadym Markov")) 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/TeamSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class TeamSpec: QuickSpec { 6 | override func spec() { 7 | describe("Team") { 8 | var team: Team! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | team = Team(parser: parser) 13 | } 14 | 15 | describe("#name") { 16 | it("returns the correct text") { 17 | let name = team.name() 18 | expect(name).to(equal("California owls")) 19 | } 20 | } 21 | 22 | describe("#creature") { 23 | it("returns the correct text") { 24 | let creature = team.creature() 25 | expect(creature).to(equal("owls")) 26 | } 27 | } 28 | 29 | describe("#state") { 30 | it("returns the correct text") { 31 | let state = team.state() 32 | expect(state).to(equal("California")) 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tests/Fakery/Data/ProviderSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class ProviderSpec: QuickSpec { 6 | override func spec() { 7 | describe("Provider") { 8 | var provider: Provider! 9 | 10 | beforeEach { 11 | provider = Provider() 12 | } 13 | 14 | describe("#init") { 15 | it ("is initialized") { 16 | expect(provider).notTo(beNil()) 17 | } 18 | 19 | it ("has empty translations dictionary") { 20 | expect(provider.translations).notTo(beNil()) 21 | expect(provider.translations.count).to(equal(0)) 22 | } 23 | } 24 | 25 | describe("#dataForLocale") { 26 | it ("returns data if locale file exists") { 27 | expect(provider.dataForLocale("en")).notTo(beNil()) 28 | } 29 | 30 | it ("returns nil if locale file doesn't exist") { 31 | expect(provider.dataForLocale("bla")).to(beNil()) 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Project/Info-Mac.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Vadym Markov. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Licensed under the **MIT** license 2 | 3 | > Copyright (c) 2015 Vadym Markov 4 | > 5 | > Permission is hereby granted, free of charge, to any person obtaining 6 | > a copy of this software and associated documentation files (the 7 | > "Software"), to deal in the Software without restriction, including 8 | > without limitation the rights to use, copy, modify, merge, publish, 9 | > distribute, sublicense, and/or sell copies of the Software, and to 10 | > permit persons to whom the Software is furnished to do so, subject to 11 | > the following conditions: 12 | > 13 | > The above copyright notice and this permission notice shall be 14 | > included in all copies or substantial portions of the Software. 15 | > 16 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | > IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | > CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | > TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | > SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/BankSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class BankSpec: QuickSpec { 6 | override func spec() { 7 | describe("Bank") { 8 | var bank: Bank! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | bank = Bank(parser: parser) 13 | } 14 | 15 | describe("#name") { 16 | it("returns the correct text") { 17 | let name = bank.name() 18 | expect(name).to(equal("ABN AMRO CORPORATE FINANCE LIMITED")) 19 | } 20 | } 21 | 22 | describe("#swiftBic") { 23 | it("returns a valid BIC") { 24 | let swiftBic = bank.swiftBic() 25 | expect(swiftBic).to(equal("AAFMGB21")) 26 | } 27 | } 28 | 29 | describe("#bban") { 30 | it("returns a valid BBAN") { 31 | let bban = bank.bban() 32 | expect(bban).to(match("[A-Z]{4}\\d{10}")) 33 | } 34 | } 35 | 36 | describe("#iban") { 37 | it("returns a valid IBAN") { 38 | let iban = bank.iban() 39 | expect(iban).to(match("[A-Z]{2}\\d{2}[A-Z]{4}\\d{10}")) 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Number.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import CoreGraphics 3 | 4 | public final class Number { 5 | fileprivate var lastUsedId: Int64 = 0 6 | 7 | public func randomBool() -> Bool { 8 | return randomInt() % 2 == 0 9 | } 10 | 11 | public func randomInt(min: Int = 0, max: Int = 1000) -> Int { 12 | var i: Int = 0 13 | arc4random_buf(&i, MemoryLayout.size(ofValue: i)) 14 | i = i & Int.max // Make the number positive 15 | 16 | if max >= 0 && max - Int.max >= min { 17 | return min + i 18 | } 19 | 20 | return min + (i % (max - min)) 21 | } 22 | 23 | public func randomFloat(min: Float = 0, max: Float = 1000) -> Float { 24 | return (Float(arc4random()) / Float(UInt32.max)) * (max - min) + min 25 | } 26 | 27 | public func randomCGFloat(min: CGFloat = 0, max: CGFloat = 1000) -> CGFloat { 28 | return CGFloat(Float(arc4random()) / Float(UInt32.max)) * (max - min) + min 29 | } 30 | 31 | public func randomDouble(min: Double = 0, max: Double = 1000) -> Double { 32 | return (Double(arc4random()) / Double(UInt32.max)) * (max - min) + min 33 | } 34 | 35 | public func increasingUniqueId() -> Int { 36 | OSAtomicIncrement64(&lastUsedId) 37 | return Int(lastUsedId) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Sources/Fakery/Faker.swift: -------------------------------------------------------------------------------- 1 | public final class Faker { 2 | public var locale: String { 3 | didSet { 4 | if locale != oldValue { 5 | parser.locale = locale 6 | } 7 | } 8 | } 9 | 10 | public let address: Address 11 | public let app: App 12 | public let business: Business 13 | public let company: Company 14 | public let commerce: Commerce 15 | public let internet: Internet 16 | public let lorem: Lorem 17 | public let name: Name 18 | public let phoneNumber: PhoneNumber 19 | public let team: Team 20 | public let number: Number 21 | public let bank: Bank 22 | 23 | let parser: Parser 24 | 25 | // MARK: - Initialization 26 | 27 | public init(locale: String = Config.defaultLocale) { 28 | self.locale = locale 29 | parser = Parser(locale: self.locale) 30 | address = Address(parser: parser) 31 | app = App(parser: parser) 32 | business = Business(parser: parser) 33 | company = Company(parser: parser) 34 | commerce = Commerce(parser: parser) 35 | internet = Internet(parser: parser) 36 | lorem = Lorem(parser: parser) 37 | name = Name(parser: parser) 38 | phoneNumber = PhoneNumber(parser: parser) 39 | team = Team(parser: parser) 40 | number = Number() 41 | bank = Bank(parser: parser) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/BusinessSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class BusinessSpec: QuickSpec { 6 | override func spec() { 7 | describe("Business") { 8 | var business: Business! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | business = Business(parser: parser) 13 | } 14 | 15 | describe("#creditCardNumber") { 16 | it("returns the correct text") { 17 | let creditCardNumber = business.creditCardNumber() 18 | expect(creditCardNumber).to(equal("1234-2121-1221-1211")) 19 | } 20 | } 21 | 22 | describe("#creditCardType") { 23 | it("returns the correct text") { 24 | let creditCardType = business.creditCardType() 25 | expect(creditCardType).to(equal("visa")) 26 | } 27 | } 28 | 29 | describe("#creditCardExpiryDate") { 30 | it("returns the correct text") { 31 | let creditCardExpiryDate = business.creditCardExpiryDate() 32 | expect(creditCardExpiryDate).notTo(beNil()) 33 | if let date = creditCardExpiryDate { 34 | let dateString = business.dateFormatter.string(from: date) 35 | expect(dateString).to(equal("2020-10-12")) 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Sources/Fakery/Data/Provider.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Provider { 4 | var translations: [String: Data] = [:] 5 | 6 | // MARK: - Locale data 7 | 8 | public func dataForLocale(_ locale: String) -> Data? { 9 | var translation: Data? 10 | 11 | if let translationData = translations[locale] { 12 | translation = translationData 13 | } else { 14 | let bundle = Bundle(for: Provider.self) 15 | var path = bundle.path(forResource: locale, 16 | ofType: Config.pathExtension, 17 | inDirectory: Config.dirPath) 18 | 19 | if path == nil { 20 | path = bundle.path(forResource: locale, 21 | ofType: Config.pathExtension, 22 | inDirectory: Config.dirFrameworkPath) 23 | } 24 | 25 | if let resourcePath = Bundle(for: Provider.self).resourcePath { 26 | let bundlePath = resourcePath + "/Faker.bundle" 27 | 28 | if let bundle = Bundle(path: bundlePath) { 29 | path = bundle.path(forResource: locale, ofType: Config.pathExtension) 30 | } 31 | } 32 | 33 | if let path = path { 34 | let fileURL = URL(fileURLWithPath: path) 35 | 36 | if let data = try? Data(contentsOf: fileURL) { 37 | translation = data 38 | translations[locale] = data 39 | } 40 | } 41 | } 42 | 43 | return translation 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/CompanySpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class CompanySpec: QuickSpec { 6 | override func spec() { 7 | describe("Company") { 8 | var company: Company! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | company = Company(parser: parser) 13 | } 14 | 15 | describe("#name") { 16 | it("returns the correct text") { 17 | let name = company.name() 18 | expect(name).to(equal("Markov Inc")) 19 | } 20 | } 21 | 22 | describe("#suffix") { 23 | it("returns the correct text") { 24 | let suffix = company.suffix() 25 | expect(suffix).to(equal("Inc")) 26 | } 27 | } 28 | 29 | describe("#catchPhrase") { 30 | it("generates random catch phrase") { 31 | let phrase = company.catchPhrase() 32 | expect(phrase).to(equal("Universal 24 hour software")) 33 | } 34 | } 35 | 36 | describe("#bs") { 37 | it("generates random BS") { 38 | let bs = company.bs() 39 | expect(bs).to(equal("implement innovative methodologies")) 40 | } 41 | } 42 | 43 | describe("#logo") { 44 | it("generates random logo") { 45 | let logo = company.logo() 46 | expect(logo).to(match("^https://pigment.github.io/fake-logos/logos/medium/color/\\d+.png$")) 47 | } 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/NameSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class NameSpec: QuickSpec { 6 | override func spec() { 7 | describe("Name") { 8 | var name: Name! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | name = Name(parser: parser) 13 | } 14 | 15 | describe("#name") { 16 | it("returns the correct text") { 17 | let text = name.name() 18 | expect(text).to(equal("Mr. Vadym Markov")) 19 | } 20 | } 21 | 22 | describe("#firstName") { 23 | it("returns the correct text") { 24 | let firstName = name.firstName() 25 | expect(firstName).to(equal("Vadym")) 26 | } 27 | } 28 | 29 | describe("#lastName") { 30 | it("returns the correct text") { 31 | let lastName = name.lastName() 32 | expect(lastName).to(equal("Markov")) 33 | } 34 | } 35 | 36 | describe("#prefix") { 37 | it("returns the correct text") { 38 | let prefix = name.prefix() 39 | expect(prefix).to(equal("Mr.")) 40 | } 41 | } 42 | 43 | describe("#suffix") { 44 | it("returns the correct text") { 45 | let suffix = name.suffix() 46 | expect(suffix).to(equal("I")) 47 | } 48 | } 49 | 50 | describe("#title") { 51 | it("returns the correct text") { 52 | let title = name.title() 53 | expect(title).to(equal("Lead Mobility Engineer")) 54 | } 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Lorem.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Lorem: Generator { 4 | public func word() -> String { 5 | return generate("lorem.words") 6 | } 7 | 8 | public func words(amount: Int = 3) -> String { 9 | var words: [String] = [] 10 | 11 | for _ in 0.. String { 19 | return characters(amount: 1) 20 | } 21 | 22 | public func characters(amount: Int = 255) -> String { 23 | var chars = "" 24 | 25 | if amount > 0 { 26 | for _ in 0.. String { 36 | var sentence = words(amount: wordsAmount) + "." 37 | sentence.replaceSubrange(sentence.startIndex...sentence.startIndex, 38 | with: String(sentence[sentence.startIndex]).capitalized) 39 | return sentence 40 | } 41 | 42 | public func sentences(amount: Int = 3) -> String { 43 | var sentences: [String] = [] 44 | 45 | for _ in 0.. String { 53 | return sentences(amount: sentencesAmount) 54 | } 55 | 56 | public func paragraphs(amount: Int = 3) -> String { 57 | var paragraphs: [String] = [] 58 | 59 | for _ in 0.. String { 5 | return generate("commerce.color") 6 | } 7 | 8 | public func department(maximum: Int = 3, fixedAmount: Bool = false) -> String { 9 | let amount = fixedAmount ? maximum : 1 + Int(arc4random_uniform(UInt32(maximum))) 10 | 11 | let fetchedCategories = categories(amount) 12 | let count = fetchedCategories.count 13 | 14 | var department = "" 15 | 16 | if count > 1 { 17 | department = merge(categories: fetchedCategories) 18 | } else if count == 1 { 19 | department = fetchedCategories[0] 20 | } 21 | 22 | return department 23 | } 24 | 25 | public func productName() -> String { 26 | return generate("commerce.product_name.adjective") + " " 27 | + generate("commerce.product_name.material") + " " 28 | + generate("commerce.product_name.product") 29 | } 30 | 31 | public func price() -> Double { 32 | let arc4randoMax: Double = 0x100000000 33 | return floor(Double((Double(arc4random()) / arc4randoMax) * 100.0) * 100) / 100.0 34 | } 35 | 36 | // MARK: - Helpers 37 | 38 | public func categories(_ amount: Int) -> [String] { 39 | var categories: [String] = [] 40 | 41 | while categories.count < amount { 42 | let category = generate("commerce.department") 43 | 44 | if !categories.contains(category) { 45 | categories.append(category) 46 | } 47 | } 48 | 49 | return categories 50 | } 51 | 52 | public func merge(categories: [String]) -> String { 53 | let separator = generate("separator") 54 | let commaSeparated = categories[0.. String { 20 | return parser.fetch(key) 21 | } 22 | 23 | // MARK: - Filling 24 | 25 | public func numerify(_ string: String) -> String { 26 | let count = UInt32(Constants.numbers.count) 27 | 28 | return String(string.enumerated().map { (index, item) in 29 | let numberIndex = index == 0 ? arc4random_uniform(count - 1) : 30 | arc4random_uniform(count) 31 | let char = Constants.numbers[Int(numberIndex)] 32 | return String(item) == "#" ? char : item 33 | }) 34 | } 35 | 36 | public func letterify(_ string: String) -> String { 37 | return String(string.enumerated().map { _, item in 38 | let count = UInt32(Constants.uppercaseLetters.count) 39 | let char = Constants.uppercaseLetters[Int(arc4random_uniform(count))] 40 | return String(item) == "?" ? char : item 41 | }) 42 | } 43 | 44 | public func bothify(_ string: String) -> String { 45 | return letterify(numerify(string)) 46 | } 47 | 48 | public func alphaNumerify(_ string: String) -> String { 49 | return string.replacingOccurrences(of: "[^A-Za-z0-9_]", 50 | with: "", 51 | options: .regularExpression, 52 | range: nil) 53 | } 54 | 55 | public func randomWordsFromKey(_ key: String) -> String { 56 | var string = "" 57 | 58 | var list = [String]() 59 | if let wordsList = parser.fetchRaw(key) as? [[String]] { 60 | for words in wordsList { 61 | if let item = words.random() { 62 | list.append(item) 63 | } 64 | } 65 | 66 | string = list.joined(separator: " ") 67 | } 68 | 69 | return string 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Resources/Locales/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "nl": { 3 | "faker": { 4 | "bank": { 5 | "name": [ 6 | "UBS CLEARING AND EXECUTION SERVICES LIMITED", 7 | "ABN AMRO CORPORATE FINANCE LIMITED", 8 | "ABN AMRO FUND MANAGERS LIMITED", 9 | "ABN AMRO HOARE GOVETT SECURITIES", 10 | "ABN AMRO HOARE GOVETT CORPORATE FINANCE LTD.", 11 | "ALKEN ASSET MANAGEMENT", 12 | "ABN AMRO HOARE GOVETT LIMITED", 13 | "AAC CAPITAL PARTNERS LIMITED", 14 | "ABBOTSTONE AGRICULTURAL PROPERTY UNIT TRUST", 15 | "ABN AMRO QUOTED INVESTMENTS (UK) LIMITED", 16 | "ABN AMRO MEZZANINE (UK) LIMITED", 17 | "ABBEY LIFE", 18 | "SANTANDER UK PLC", 19 | "OTKRITIE SECURITIES LIMITED", 20 | "ABC INTERNATIONAL BANK PLC", 21 | "ALLIED BANK PHILIPPINES (UK) PLC", 22 | "ABU DHABI ISLAMIC BANK", 23 | "ABG SUNDAL COLLIER LIMITED", 24 | "PGMS (GLASGOW) LIMITED", 25 | "ABINGWORTH MANAGEMENT LIMITED", 26 | "THE ROYAL BANK OF SCOTLAND PLC (FORMER RBS NV)" 27 | ], 28 | "swiftBic": [ 29 | "AACCGB21", 30 | "AACNGB21", 31 | "AAFMGB21", 32 | "AAHOGB21", 33 | "AAHVGB21", 34 | "AANLGB21", 35 | "AANLGB2L", 36 | "AAOGGB21", 37 | "AAPEGB21", 38 | "AAPUGB21", 39 | "AAQIGB21", 40 | "ABAZGB21", 41 | "ABBEGB21", 42 | "ABBYGB2L", 43 | "ABCCGB22", 44 | "ABCEGB2L", 45 | "ABCMGB21", 46 | "ABDIGB21", 47 | "ABECGB21", 48 | "ABFIGB21", 49 | "ABMNGB21", 50 | "ABNAGB21VOC" 51 | ], 52 | "ibanDetails": { 53 | "bankCountryCode": "NL", 54 | "ibanLetterCode": ["RABO", "BUNQ", "ABNA", "INGB"], 55 | "ibanDigits": "############", 56 | } 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/CommerceSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class CommerceSpec: QuickSpec { 6 | override func spec() { 7 | describe("Commerce") { 8 | var commerce: Commerce! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | commerce = Commerce(parser: parser) 13 | } 14 | 15 | describe("#color") { 16 | it("generates the correct text") { 17 | let color = commerce.color() 18 | expect(color).to(equal("black")) 19 | } 20 | } 21 | 22 | describe("#department") { 23 | it("generates the correct text") { 24 | let department = commerce.department(maximum: 3, fixedAmount: true) 25 | expect(department.range(of: "Music")).notTo(beNil()) 26 | expect(department.range(of: "Video")).notTo(beNil()) 27 | expect(department.range(of: "Development")).notTo(beNil()) 28 | expect(department.range(of: "&")).notTo(beNil()) 29 | expect(department).to(match("^[A-Za-z]+, [A-Za-z]+ & [A-Za-z]+$")) 30 | } 31 | } 32 | 33 | describe("#productName") { 34 | it("generates the correct text") { 35 | let productName = commerce.productName() 36 | expect(productName).to(equal("Awesome Wooden Hat")) 37 | } 38 | } 39 | 40 | describe("#price") { 41 | it("generates the correct number") { 42 | let price = commerce.price() 43 | expect(price > 0.0).to(beTrue()) 44 | expect(price <= 100.0).to(beTrue()) 45 | } 46 | } 47 | 48 | describe("#categories") { 49 | it("returns the correct amount of categories") { 50 | let categories = commerce.categories(3) 51 | expect(categories.count == 3).to(beTrue()) 52 | } 53 | 54 | it("returns the array of unique categories") { 55 | let categories = commerce.categories(3) 56 | var checked: [String] = [] 57 | for category in categories { 58 | if checked.contains(category) { break } 59 | checked.append(category) 60 | } 61 | 62 | expect(checked.count).to(equal(categories.count)) 63 | } 64 | } 65 | 66 | describe("#merge:categories") { 67 | it("returns the correct text") { 68 | let text = commerce.merge(categories: ["One", "Two", "Three", "Four"]) 69 | expect(text).to(equal("One, Two, Three & Four")) 70 | } 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/NumberSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class NumberSpec: QuickSpec { 6 | override func spec() { 7 | describe("Number") { 8 | var number: Number! 9 | 10 | beforeEach { 11 | number = Number() 12 | } 13 | 14 | it("creates contionusly increasing ids") { 15 | expect(number.increasingUniqueId()).to(equal(1)) 16 | expect(number.increasingUniqueId()).to(equal(2)) 17 | expect(number.increasingUniqueId()).to(equal(3)) 18 | } 19 | 20 | it("creates random Ints") { 21 | expect(number.randomInt()) <= 1000 22 | expect(number.randomInt()) >= 0 23 | 24 | expect(number.randomInt(min:10)) >= 10 25 | expect(number.randomInt(max:10)) <= 10 26 | 27 | expect(number.randomInt(min:5, max:7)) <= 7 28 | expect(number.randomInt(min:5, max:7)) >= 5 29 | 30 | expect(number.randomInt(min: 1000000000000, max: 9999999999999)) >= 1000000000000 31 | expect(number.randomInt(min: 1000000000000, max: 9999999999999)) <= 9999999999999 32 | 33 | expect(number.randomInt(min: Int.min, max: Int.max)) >= Int.min 34 | expect(number.randomInt(min: Int.min, max: Int.max)) <= Int.max 35 | 36 | expect(number.randomInt(min: Int.min, max: 0)) >= Int.min 37 | expect(number.randomInt(min: Int.min, max: 0)) <= 0 38 | 39 | } 40 | 41 | it("creates random Floats") { 42 | expect(number.randomFloat()) <= 1000 43 | expect(number.randomFloat()) >= 0 44 | 45 | expect(number.randomFloat(min:10)) >= 10 46 | expect(number.randomFloat(max:10)) <= 10 47 | 48 | expect(number.randomFloat(min:5, max:7)) <= 7 49 | expect(number.randomFloat(min:5, max:7)) >= 5 50 | } 51 | 52 | it("creates random CGFloats") { 53 | expect(number.randomCGFloat()) <= 1000 54 | expect(number.randomCGFloat()) >= 0 55 | 56 | expect(number.randomCGFloat(min:10)) >= 10 57 | expect(number.randomCGFloat(max:10)) <= 10 58 | 59 | expect(number.randomCGFloat(min:5, max:7)) <= 7 60 | expect(number.randomCGFloat(min:5, max:7)) >= 5 61 | } 62 | 63 | it("creates random Doubles") { 64 | expect(number.randomDouble()) <= 1000 65 | expect(number.randomDouble()) >= 0 66 | 67 | expect(number.randomDouble(min:10)) >= 10 68 | expect(number.randomDouble(max:10)) <= 10 69 | 70 | expect(number.randomDouble(min:5, max:7)) <= 7 71 | expect(number.randomDouble(min:5, max:7)) >= 5 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /Tests/Fakery/FakerSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class FakerSpec: QuickSpec { 6 | override func spec() { 7 | describe("Faker") { 8 | var faker: Faker! 9 | 10 | beforeEach { 11 | faker = Faker() 12 | } 13 | 14 | describe("#init") { 15 | it("sets default values") { 16 | expect(faker.locale).to(equal(Config.defaultLocale)) 17 | expect(faker.parser.locale).to(equal(Config.defaultLocale)) 18 | 19 | expect(faker.address.parser).to(beIdenticalTo(faker.parser)) 20 | expect(faker.app.parser).to(beIdenticalTo(faker.parser)) 21 | expect(faker.business.parser).to(beIdenticalTo(faker.parser)) 22 | expect(faker.commerce.parser).to(beIdenticalTo(faker.parser)) 23 | expect(faker.internet.parser).to(beIdenticalTo(faker.parser)) 24 | expect(faker.lorem.parser).to(beIdenticalTo(faker.parser)) 25 | expect(faker.name.parser).to(beIdenticalTo(faker.parser)) 26 | expect(faker.phoneNumber.parser).to(beIdenticalTo(faker.parser)) 27 | expect(faker.team.parser).to(beIdenticalTo(faker.parser)) 28 | expect(faker.bank.parser).to(beIdenticalTo(faker.parser)) 29 | } 30 | } 31 | 32 | describe("#address") { 33 | it("should be accessible") { 34 | expect(faker.address).to(beAKindOf(Address.self)) 35 | } 36 | } 37 | 38 | describe("#app") { 39 | it("should be accessible") { 40 | expect(faker.app).to(beAKindOf(App.self)) 41 | } 42 | } 43 | 44 | describe("#business") { 45 | it("should be accessible") { 46 | expect(faker.business).to(beAKindOf(Business.self)) 47 | } 48 | } 49 | 50 | describe("#commerce") { 51 | it("should be accessible") { 52 | expect(faker.commerce).to(beAKindOf(Commerce.self)) 53 | } 54 | } 55 | 56 | describe("#internet") { 57 | it("should be accessible") { 58 | expect(faker.internet).to(beAKindOf(Internet.self)) 59 | } 60 | } 61 | 62 | describe("#lorem") { 63 | it("should be accessible") { 64 | expect(faker.lorem).to(beAKindOf(Lorem.self)) 65 | } 66 | } 67 | 68 | describe("#name") { 69 | it("should be accessible") { 70 | expect(faker.name).to(beAKindOf(Name.self)) 71 | } 72 | } 73 | 74 | describe("#phoneNumber") { 75 | it("should be accessible") { 76 | expect(faker.phoneNumber).to(beAKindOf(PhoneNumber.self)) 77 | } 78 | } 79 | 80 | describe("#team") { 81 | it("should be accessible") { 82 | expect(faker.team).to(beAKindOf(Team.self)) 83 | } 84 | } 85 | 86 | describe("#bank") { 87 | it("should be accessible") { 88 | expect(faker.bank).to(beAKindOf(Bank.self)) 89 | } 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Tests/Fakery/Data/ParserSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class ParserSpec: QuickSpec { 6 | override func spec() { 7 | describe("Parser") { 8 | var parser: Parser! 9 | 10 | beforeEach { 11 | parser = Parser() 12 | } 13 | 14 | describe("#init") { 15 | it("sets default values") { 16 | expect(parser.locale).to(equal(Config.defaultLocale)) 17 | expect(parser.provider).notTo(beNil()) 18 | } 19 | } 20 | 21 | describe("parsing") { 22 | beforeEach { 23 | parser.locale = "en-TEST" 24 | } 25 | 26 | describe("#fetch") { 27 | context("when the key is correct") { 28 | it("returns the correct text") { 29 | let city = parser.fetch("address.city") 30 | expect(city).to(equal("North Vadymtown")) 31 | 32 | let name = parser.fetch("name.name") 33 | expect(name).to(equal("Mr. Vadym Markov")) 34 | 35 | let team = parser.fetch("team.name") 36 | expect(team).to(equal("California owls")) 37 | } 38 | } 39 | 40 | context("when the key is incorrect") { 41 | it("returns the empty text") { 42 | let dummy = parser.fetch("dummy") 43 | expect(dummy).to(equal("")) 44 | } 45 | } 46 | } 47 | 48 | describe("#fetchRaw") { 49 | context("when the key is correct") { 50 | it("returns the correct text") { 51 | if let city = (parser.fetchRaw("address.city") as? [String])?[0] { 52 | expect(city).to(equal("#{city_prefix} #{Name.first_name}#{city_suffix}")) 53 | } 54 | 55 | if let name = (parser.fetchRaw("name.name") as? [String])?[0] { 56 | expect(name).to(equal("#{prefix} #{first_name} #{last_name}")) 57 | } 58 | 59 | if let team = (parser.fetchRaw("team.name") as? [String])?[0] { 60 | expect(team).to(equal("#{Address.state} #{creature}")) 61 | } 62 | } 63 | } 64 | 65 | context("when the key is incorrect") { 66 | it("returns the empty text") { 67 | if let dummy = parser.fetchRaw("dummy") as? String { 68 | expect(dummy).to(beNil()) 69 | } 70 | } 71 | } 72 | } 73 | 74 | describe("#parse:forSubject") { 75 | context("when the subject is correct") { 76 | it("returns the correct text") { 77 | let text = parser.parse("#{Name.first_name} #{street_suffix} Test", forSubject: "address") 78 | expect(text).to(equal("Vadym Avenue Test")) 79 | } 80 | } 81 | 82 | context("when the subject is incorrect") { 83 | it("returns the passed text") { 84 | let text = parser.parse("test", forSubject: "test") 85 | expect(text).to(equal("test")) 86 | 87 | let text1 = parser.parse("test", forSubject: "address") 88 | expect(text1).to(equal("test")) 89 | } 90 | } 91 | } 92 | } 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Address.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import CoreLocation 3 | 4 | public final class Address: Generator { 5 | public func city() -> String { 6 | return generate("address.city") 7 | } 8 | 9 | public func streetName() -> String { 10 | return generate("address.street_name") 11 | } 12 | 13 | public func secondaryAddress() -> String { 14 | return numerify(generate("address.secondary_address")) 15 | } 16 | 17 | public func streetAddress(includeSecondary: Bool = false) -> String { 18 | var streetAddress = numerify(generate("address.street_address")) 19 | 20 | if includeSecondary { 21 | streetAddress += " " + secondaryAddress() 22 | } 23 | 24 | return streetAddress 25 | } 26 | 27 | public func buildingNumber() -> String { 28 | return bothify(generate("address.building_number")) 29 | } 30 | 31 | public func postcode(stateAbbreviation: String = "") -> String { 32 | if stateAbbreviation.isEmpty { 33 | return bothify(generate("address.postcode")) 34 | } 35 | 36 | return bothify(generate("address.postcode_by_state.\(stateAbbreviation)")) 37 | } 38 | 39 | public func timeZone() -> String { 40 | return generate("address.time_zone") 41 | } 42 | 43 | public func streetSuffix() -> String { 44 | return generate("address.street_suffix") 45 | } 46 | 47 | public func citySuffix() -> String { 48 | return generate("address.city_suffix") 49 | } 50 | 51 | public func cityPrefix() -> String { 52 | return generate("address.city_prefix") 53 | } 54 | 55 | public func stateAbbreviation() -> String { 56 | return generate("address.state_abbr") 57 | } 58 | 59 | public func state() -> String { 60 | return generate("address.state") 61 | } 62 | 63 | public func county() -> String { 64 | return generate("address.county") 65 | } 66 | 67 | public func country() -> String { 68 | return generate("address.country") 69 | } 70 | 71 | public func countryCode() -> String { 72 | return generate("address.country_code") 73 | } 74 | 75 | public func latitude() -> Double { 76 | return drand48() * 180.0 - 90.0 77 | } 78 | 79 | public func longitude() -> Double { 80 | return drand48() * 360.0 - 180.0 81 | } 82 | 83 | public func coordinate(inRadius radius: Double, fromCenter center:CLLocationCoordinate2D) -> CLLocationCoordinate2D { 84 | let y0 = center.latitude 85 | let x0 = center.longitude 86 | 87 | // Convert meters to degrees for radius 88 | let radiusInDegrees = radius / 111300.0 89 | 90 | // Random point in circle 91 | let u = Double(arc4random()) / 0xFFFFFFFF 92 | let v = Double(arc4random()) / 0xFFFFFFFF 93 | let w = radiusInDegrees * sqrt(u) 94 | let t = 2 * .pi * v 95 | let x = w * cos(t) 96 | let y = w * sin(t) 97 | 98 | // Adjust longitude (x) to adjust for east-west shrinking in distance 99 | let latRadians = y0 * .pi / 180 100 | let newx = x / cos(latRadians) 101 | 102 | // Set found random point 103 | let foundLatitude = y + y0 104 | let foundLongitude = newx + x0 105 | 106 | return CLLocationCoordinate2D.init(latitude: foundLatitude, longitude: foundLongitude) 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /Fakery.xcodeproj/xcshareddata/xcschemes/Fakery-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 74 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Resources/Locales/en-GB.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-GB": { 3 | "faker": { 4 | "address": { 5 | "postcode": "/[A-PR-UWYZ][A-HK-Y]?[0-9][ABEHMNPRVWXY0-9]? [0-9][ABD-HJLN-UW-Z]{2}/", 6 | "county": [ 7 | "Avon", 8 | "Bedfordshire", 9 | "Berkshire", 10 | "Borders", 11 | "Buckinghamshire", 12 | "Cambridgeshire", 13 | "Central", 14 | "Cheshire", 15 | "Cleveland", 16 | "Clwyd", 17 | "Cornwall", 18 | "County Antrim", 19 | "County Armagh", 20 | "County Down", 21 | "County Fermanagh", 22 | "County Londonderry", 23 | "County Tyrone", 24 | "Cumbria", 25 | "Derbyshire", 26 | "Devon", 27 | "Dorset", 28 | "Dumfries and Galloway", 29 | "Durham", 30 | "Dyfed", 31 | "East Sussex", 32 | "Essex", 33 | "Fife", 34 | "Gloucestershire", 35 | "Grampian", 36 | "Greater Manchester", 37 | "Gwent", 38 | "Gwynedd County", 39 | "Hampshire", 40 | "Herefordshire", 41 | "Hertfordshire", 42 | "Highlands and Islands", 43 | "Humberside", 44 | "Isle of Wight", 45 | "Kent", 46 | "Lancashire", 47 | "Leicestershire", 48 | "Lincolnshire", 49 | "Lothian", 50 | "Merseyside", 51 | "Mid Glamorgan", 52 | "Norfolk", 53 | "North Yorkshire", 54 | "Northamptonshire", 55 | "Northumberland", 56 | "Nottinghamshire", 57 | "Oxfordshire", 58 | "Powys", 59 | "Rutland", 60 | "Shropshire", 61 | "Somerset", 62 | "South Glamorgan", 63 | "South Yorkshire", 64 | "Staffordshire", 65 | "Strathclyde", 66 | "Suffolk", 67 | "Surrey", 68 | "Tayside", 69 | "Tyne and Wear", 70 | "Warwickshire", 71 | "West Glamorgan", 72 | "West Midlands", 73 | "West Sussex", 74 | "West Yorkshire", 75 | "Wiltshire", 76 | "Worcestershire" 77 | ], 78 | "uk_country": [ 79 | "England", 80 | "Scotland", 81 | "Wales", 82 | "Northern Ireland" 83 | ], 84 | "default_country": [ 85 | "England", 86 | "Scotland", 87 | "Wales", 88 | "Northern Ireland" 89 | ] 90 | }, 91 | "internet": { 92 | "domain_suffix": [ 93 | "co.uk", 94 | "com", 95 | "biz", 96 | "info", 97 | "name" 98 | ] 99 | }, 100 | "phone_number": { 101 | "formats": [ 102 | "01#### #####", 103 | "01### ######", 104 | "01#1 ### ####", 105 | "011# ### ####", 106 | "02# #### ####", 107 | "03## ### ####", 108 | "055 #### ####", 109 | "056 #### ####", 110 | "0800 ### ####", 111 | "08## ### ####", 112 | "09## ### ####", 113 | "016977 ####", 114 | "01### #####", 115 | "0500 ######", 116 | "0800 ######" 117 | ] 118 | }, 119 | "cell_phone": { 120 | "formats": [ 121 | "074## ######", 122 | "075## ######", 123 | "076## ######", 124 | "077## ######", 125 | "078## ######", 126 | "079## ######" 127 | ] 128 | } 129 | } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /Sources/Fakery/Generators/Internet.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Internet: Generator { 4 | private let lorem: Lorem 5 | 6 | public required init(parser: Parser) { 7 | self.lorem = Lorem(parser: parser) 8 | super.init(parser: parser) 9 | } 10 | 11 | public func username(separator: String? = nil) -> String { 12 | var components: [String] = [ 13 | generate("name.first_name"), 14 | generate("name.last_name"), 15 | "\(arc4random_uniform(10000))" 16 | ] 17 | 18 | let randomCount = UInt32(components.count) - 1 19 | let count = Int(arc4random_uniform(randomCount) + randomCount) 20 | 21 | var gap = "" 22 | if let sep = separator { 23 | gap = sep 24 | } 25 | 26 | return components[0.. String { 32 | return domainWord(alphaNumericOnly: alphaNumericOnly) + "." + domainSuffix() 33 | } 34 | 35 | public func domainWord(alphaNumericOnly: Bool = true) -> String { 36 | let nameParts = generate("company.name").components(separatedBy: " ") 37 | var name = "" 38 | 39 | if let first = nameParts.first { 40 | name = first 41 | } else { 42 | name = letterify("?????") 43 | } 44 | 45 | let result = alphaNumericOnly ? alphaNumerify(name) : name 46 | 47 | return result.lowercased() 48 | } 49 | 50 | public func domainSuffix() -> String { 51 | return generate("internet.domain_suffix") 52 | } 53 | 54 | public func email() -> String { 55 | return [username(), domainName()].joined(separator: "@") 56 | } 57 | 58 | public func freeEmail() -> String { 59 | return [username(), generate("internet.free_email")].joined(separator: "@") 60 | } 61 | 62 | public func safeEmail() -> String { 63 | let topLevelDomains = ["org", "com", "net"] 64 | let count = UInt32(topLevelDomains.count) 65 | let topLevelDomain = topLevelDomains[Int(arc4random_uniform(count))] 66 | 67 | return [username(), "example." + topLevelDomain].joined(separator: "@") 68 | } 69 | 70 | public func password(minimumLength: Int = 8, maximumLength: Int = 16) -> String { 71 | var temp = lorem.characters(amount: minimumLength) 72 | let diffLength = maximumLength - minimumLength 73 | 74 | if diffLength > 0 { 75 | let diffRandom = Int(arc4random_uniform(UInt32(diffLength + 1))) 76 | temp += lorem.characters(amount: diffRandom) 77 | } 78 | 79 | return temp 80 | } 81 | 82 | public func ipV4Address() -> String { 83 | let ipRand = { 84 | 2 + arc4random() % 253 85 | } 86 | 87 | return String(format: "%d.%d.%d.%d", ipRand(), ipRand(), ipRand(), ipRand()) 88 | } 89 | 90 | public func ipV6Address() -> String { 91 | var components: [String] = [] 92 | 93 | for _ in 1..<8 { 94 | components.append(String(format: "%X", arc4random() % 65535)) 95 | } 96 | 97 | return components.joined(separator: ":") 98 | } 99 | 100 | public func url() -> String { 101 | return "https://\(domainName())/\(username())" 102 | } 103 | 104 | public func image(width: Int = 320, height: Int = 200) -> String { 105 | return "https://lorempixel.com/\(width)/\(height)" 106 | } 107 | 108 | public func templateImage(width: Int = 320, height: Int = 200, 109 | backColorHex: String = "000000", frontColorHex: String = "ffffff") -> String { 110 | return "https://dummyimage.com/\(width)x\(height)/\(backColorHex)/\(frontColorHex)" 111 | } 112 | 113 | public func hashtag() -> String { 114 | return generate("internet.hashtag") 115 | } 116 | 117 | // @ToDo - slug 118 | } 119 | -------------------------------------------------------------------------------- /Fakery.xcodeproj/xcshareddata/xcschemes/Fakery-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 66 | 67 | 73 | 74 | 75 | 76 | 77 | 78 | 84 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Fakery.xcodeproj/xcshareddata/xcschemes/Fakery-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 66 | 67 | 73 | 74 | 75 | 76 | 77 | 78 | 84 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Resources/Locales/en-TEST.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-TEST": { 3 | "faker": { 4 | "separator": " & ", 5 | "address": { 6 | "city_prefix": ["North"], 7 | "city_suffix": ["town"], 8 | "county": ["Autauga County"], 9 | "country": ["United States of America"], 10 | "country_code": ["US"], 11 | "building_number": ["#####"], 12 | "street_suffix": ["Avenue"], 13 | "secondary_address": ["Apt. ###"], 14 | "postcode": ["#####-####"], 15 | "postcode_by_state": { 16 | "CA": "900##" 17 | }, 18 | "state": ["California"], 19 | "state_abbr": ["CA"], 20 | "time_zone": ["America/Los_Angeles"], 21 | "city": ["#{city_prefix} #{Name.first_name}#{city_suffix}"], 22 | "street_name": ["#{Name.first_name} #{street_suffix}"], 23 | "street_address": ["#{building_number} #{street_name}"], 24 | "default_country": ["United States of America"] 25 | }, 26 | "credit_card": { 27 | "visa": ["/4###########L/"], 28 | "mastercard": ["/5[1-5]##-####-####-###L/"], 29 | "discover": ["/6011-####-####-###L/"], 30 | "american_express": ["/34##-######-####L/"], 31 | "diners_club": ["/30[0-5]#-######-###L/"], 32 | "jcb": ["/3528-####-####-###L/"], 33 | "switch": ["/6759-####-####-###L/"], 34 | "solo": ["/6767-####-####-###L/"], 35 | "dankort": "/5019-####-####-###L/", 36 | "maestro": ["/50#{9,16}L/"], 37 | "forbrugsforeningen": "/6007-22##-####-###L/", 38 | "laser": ["/6304###########L/"] 39 | }, 40 | "company": { 41 | "suffix": ["Inc"], 42 | "buzzwords": [ 43 | ["Universal"], 44 | ["24 hour"], 45 | ["software"] 46 | ], 47 | "bs": [ 48 | ["implement"], 49 | ["innovative"], 50 | ["methodologies"] 51 | ], 52 | "name": ["#{Name.last_name} #{suffix}"] 53 | }, 54 | "internet": { 55 | "free_email": ["gmail.com"], 56 | "domain_suffix": ["com"], 57 | "hashtag": ["#art"] 58 | }, 59 | "lorem": { 60 | "words": ["alias"], 61 | "supplemental": ["abbas"] 62 | }, 63 | "name": { 64 | "first_name": ["Vadym"], 65 | "last_name": ["Markov"], 66 | "prefix": ["Mr."], 67 | "suffix": ["I"], 68 | "title": { 69 | "descriptor": ["Lead"], 70 | "level": ["Mobility"], 71 | "job": ["Engineer"] 72 | }, 73 | "name": ["#{prefix} #{first_name} #{last_name}"] 74 | }, 75 | "phone_number": { 76 | "area_code": ["201"], 77 | "exchange_code": ["201"], 78 | "formats": ["###-###-####"] 79 | }, 80 | "cell_phone": { 81 | "formats": ["(###) ###-####"] 82 | }, 83 | "business": { 84 | "credit_card_numbers": ["1234-2121-1221-1211"], 85 | "credit_card_expiry_dates": ["2020-10-12"], 86 | "credit_card_types": ["visa"] 87 | }, 88 | "commerce": { 89 | "color": ["black"], 90 | "department": ["Music", "Video", "Development"], 91 | "product_name": { 92 | "adjective": ["Awesome"], 93 | "material": ["Wooden"], 94 | "product": ["Hat"] 95 | } 96 | }, 97 | "team": { 98 | "creature": ["owls"], 99 | "name": ["#{Address.state} #{creature}"] 100 | }, 101 | "hacker": { 102 | "abbreviation": ["TCP"], 103 | "adjective": ["open-source"], 104 | "noun": ["matrix"], 105 | "verb": ["hack"], 106 | "ingverb": ["bypassing"] 107 | }, 108 | "app": { 109 | "name": ["Namfix"], 110 | "version": ["0.#.#"], 111 | "author": ["#{Name.name}"] 112 | }, 113 | "bank": { 114 | "name": ["ABN AMRO CORPORATE FINANCE LIMITED"], 115 | "swiftBic": ["AAFMGB21"], 116 | "ibanDetails": { 117 | "bankCountryCode": ["EN"], 118 | "ibanLetterCode": ["????"], 119 | "ibanDigits": ["############"], 120 | } 121 | } 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /Resources/Locales/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "ja": { 3 | "faker": { 4 | "address": { 5 | "postcode": [ 6 | "###-####" 7 | ], 8 | "state": [ 9 | "北海道", 10 | "青森県", 11 | "岩手県", 12 | "宮城県", 13 | "秋田県", 14 | "山形県", 15 | "福島県", 16 | "茨城県", 17 | "栃木県", 18 | "群馬県", 19 | "埼玉県", 20 | "千葉県", 21 | "東京都", 22 | "神奈川県", 23 | "新潟県", 24 | "富山県", 25 | "石川県", 26 | "福井県", 27 | "山梨県", 28 | "長野県", 29 | "岐阜県", 30 | "静岡県", 31 | "愛知県", 32 | "三重県", 33 | "滋賀県", 34 | "京都府", 35 | "大阪府", 36 | "兵庫県", 37 | "奈良県", 38 | "和歌山県", 39 | "鳥取県", 40 | "島根県", 41 | "岡山県", 42 | "広島県", 43 | "山口県", 44 | "徳島県", 45 | "香川県", 46 | "愛媛県", 47 | "高知県", 48 | "福岡県", 49 | "佐賀県", 50 | "長崎県", 51 | "熊本県", 52 | "大分県", 53 | "宮崎県", 54 | "鹿児島県", 55 | "沖縄県" 56 | ], 57 | "state_abbr": [ 58 | "1", 59 | "2", 60 | "3", 61 | "4", 62 | "5", 63 | "6", 64 | "7", 65 | "8", 66 | "9", 67 | "10", 68 | "11", 69 | "12", 70 | "13", 71 | "14", 72 | "15", 73 | "16", 74 | "17", 75 | "18", 76 | "19", 77 | "20", 78 | "21", 79 | "22", 80 | "23", 81 | "24", 82 | "25", 83 | "26", 84 | "27", 85 | "28", 86 | "29", 87 | "30", 88 | "31", 89 | "32", 90 | "33", 91 | "34", 92 | "35", 93 | "36", 94 | "37", 95 | "38", 96 | "39", 97 | "40", 98 | "41", 99 | "42", 100 | "43", 101 | "44", 102 | "45", 103 | "46", 104 | "47" 105 | ], 106 | "city_prefix": [ 107 | "北", 108 | "東", 109 | "西", 110 | "南", 111 | "新", 112 | "湖", 113 | "港" 114 | ], 115 | "city_suffix": [ 116 | "市", 117 | "区", 118 | "町", 119 | "村" 120 | ], 121 | "city": [ 122 | "#{city_prefix}#{Name.first_name}#{city_suffix}", 123 | "#{Name.first_name}#{city_suffix}", 124 | "#{city_prefix}#{Name.last_name}#{city_suffix}", 125 | "#{Name.last_name}#{city_suffix}" 126 | ], 127 | "street_name": [ 128 | "#{Name.first_name}#{street_suffix}", 129 | "#{Name.last_name}#{street_suffix}" 130 | ] 131 | }, 132 | "phone_number": { 133 | "formats": [ 134 | "0####-#-####", 135 | "0###-##-####", 136 | "0##-###-####", 137 | "0#-####-####" 138 | ] 139 | }, 140 | "cell_phone": { 141 | "formats": [ 142 | "090-####-####", 143 | "080-####-####", 144 | "070-####-####" 145 | ] 146 | }, 147 | "name": { 148 | "last_name": [ 149 | "佐藤", 150 | "鈴木", 151 | "高橋", 152 | "田中", 153 | "渡辺", 154 | "伊藤", 155 | "山本", 156 | "中村", 157 | "小林", 158 | "加藤", 159 | "吉田", 160 | "山田", 161 | "佐々木", 162 | "山口", 163 | "斎藤", 164 | "松本", 165 | "井上", 166 | "木村", 167 | "林", 168 | "清水" 169 | ], 170 | "first_name": [ 171 | "大翔", 172 | "蓮", 173 | "颯太", 174 | "樹", 175 | "大和", 176 | "陽翔", 177 | "陸斗", 178 | "太一", 179 | "海翔", 180 | "蒼空", 181 | "翼", 182 | "陽菜", 183 | "結愛", 184 | "結衣", 185 | "杏", 186 | "莉子", 187 | "美羽", 188 | "結菜", 189 | "心愛", 190 | "愛菜", 191 | "美咲" 192 | ], 193 | "name": [ 194 | "#{last_name} #{first_name}" 195 | ] 196 | } 197 | } 198 | } 199 | } 200 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/LoremSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class LoremSpec: QuickSpec { 6 | override func spec() { 7 | describe("Lorem") { 8 | var lorem: Lorem! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | lorem = Lorem(parser: parser) 13 | } 14 | 15 | describe("#word") { 16 | it("returns the correct text") { 17 | let word = lorem.word() 18 | expect(word).to(match("^[A-Za-z]+$")) 19 | } 20 | } 21 | 22 | describe("#words") { 23 | context("without the amount - 3 words by default") { 24 | it("returns the expected amount of words") { 25 | let word = lorem.words() 26 | expect(word).to(match("^[A-Za-z]+ [A-Za-z]+ [A-Za-z]+$")) 27 | } 28 | } 29 | 30 | context("with the amount of words") { 31 | it("returns the expected amount of words") { 32 | let word = lorem.words(amount: 2) 33 | expect(word).to(match("^[A-Za-z]+ [A-Za-z]+$")) 34 | } 35 | } 36 | } 37 | 38 | describe("#character") { 39 | it("returns the correct character") { 40 | let char = lorem.character() 41 | expect(char).to(match("^[A-Za-z]$")) 42 | } 43 | } 44 | 45 | describe("#characters") { 46 | context("without the amount - 255 chars by default") { 47 | it("returns the expected amount of characters") { 48 | let chars = lorem.characters() 49 | expect(chars).to(match("^[A-Za-z]{255}")) 50 | } 51 | } 52 | 53 | context("with the amount of chars") { 54 | it("returns the expected amount of characters") { 55 | let chars = lorem.characters(amount: 7) 56 | expect(chars).to(match("^[A-Za-z]{7}")) 57 | } 58 | } 59 | } 60 | 61 | describe("#sentence") { 62 | context("without the amount - 4 words by default") { 63 | it("returns the expected amount of words") { 64 | let sentence = lorem.sentence() 65 | expect(sentence).to(match("^[A-Z][A-Za-z]+ [A-Za-z]+ [A-Za-z]+ [A-Za-z]+.$")) 66 | } 67 | } 68 | 69 | context("with the amount of words") { 70 | it("returns the expected amount of words") { 71 | let sentence = lorem.sentence(wordsAmount: 2) 72 | expect(sentence).to(match("^[A-Z][A-Za-z]+ [A-Za-z]+.$")) 73 | } 74 | } 75 | } 76 | 77 | describe("#sentences") { 78 | context("without the amount - 3 sentences by default") { 79 | it("returns the expected amount of sentences") { 80 | let sentences = lorem.sentences() 81 | expect(sentences).to(match("^[A-Za-z ]+. [A-Za-z ]+. [A-Za-z ]+.$")) 82 | } 83 | } 84 | 85 | context("with the amount of sentences") { 86 | it("returns the expected amount of sentences") { 87 | let sentences = lorem.sentences(amount: 2) 88 | expect(sentences).to(match("^[A-Za-z ]+. [A-Za-z ]+.$")) 89 | } 90 | } 91 | } 92 | 93 | describe("#paragraph") { 94 | context("without the amount - 3 sentence by default") { 95 | it("returns the expected amount of sentences") { 96 | let paragraph = lorem.paragraph() 97 | expect(paragraph).to(match("^[A-Za-z ]+. [A-Za-z ]+. [A-Za-z ]+.$")) 98 | } 99 | } 100 | 101 | context("with the amount of words") { 102 | it("returns the expected amount of sentences") { 103 | let sentence = lorem.paragraph(sentencesAmount: 2) 104 | expect(sentence).to(match("^[A-Za-z ]+. [A-Za-z ]+.$")) 105 | } 106 | } 107 | } 108 | 109 | describe("#paragraphs") { 110 | context("without the amount - 3 paragraphs by default") { 111 | it("returns the expected amount of paragraphs") { 112 | let paragraphs = lorem.paragraphs() 113 | expect(paragraphs).to(match("^[A-Za-z .]+\\n[A-Za-z .]+\\n[A-Za-z .]+$")) 114 | } 115 | } 116 | 117 | context("with the amount of paragraphs") { 118 | it("returns the expected amount of paragraphs") { 119 | let paragraphs = lorem.paragraphs(amount: 2) 120 | expect(paragraphs).to(match("^[A-Za-z .]+\\n[A-Za-z .]+$")) 121 | } 122 | } 123 | } 124 | 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /Sources/Fakery/Data/Parser.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class Parser { 4 | public var locale: String { 5 | didSet { 6 | if locale != oldValue { 7 | loadData(forLocale: locale) 8 | } 9 | } 10 | } 11 | 12 | private var data = [String: Any]() 13 | let provider: Provider 14 | 15 | // MARK: - Initialization 16 | 17 | public init(locale: String = Config.defaultLocale) { 18 | self.locale = locale 19 | provider = Provider() 20 | loadData(forLocale: locale) 21 | 22 | if locale != Config.defaultLocale { 23 | loadData(forLocale: Config.defaultLocale) 24 | } 25 | } 26 | 27 | // MARK: - Parsing 28 | 29 | public func fetch(_ key: String) -> String { 30 | var parsed = "" 31 | 32 | guard let keyData = fetchRaw(key) else { 33 | return parsed 34 | } 35 | 36 | let subject = getSubject(key) 37 | 38 | if let value = keyData as? String { 39 | parsed = value 40 | } else if let array = keyData as? [String], let item = array.random() { 41 | parsed = item 42 | } 43 | 44 | if parsed.range(of: "#{") != nil { 45 | parsed = parse(parsed, forSubject: subject) 46 | } 47 | 48 | return parsed 49 | } 50 | 51 | public func fetchRaw(_ key: String) -> Any? { 52 | let result = fetchRaw(key, forLocale: locale) 53 | 54 | guard locale != Config.defaultLocale else { 55 | return result 56 | } 57 | 58 | return result ?? fetchRaw(key, forLocale: Config.defaultLocale) 59 | } 60 | 61 | func parse(_ template: String, forSubject subject: String) -> String { 62 | var text = "" 63 | let string = template as NSString 64 | var regex: NSRegularExpression 65 | 66 | do { 67 | try regex = NSRegularExpression(pattern: "(\\(?)#\\{([A-Za-z]+\\.)?([^\\}]+)\\}([^#]+)?", 68 | options: .caseInsensitive) 69 | let matches = regex.matches(in: string as String, 70 | options: .reportCompletion, 71 | range: NSRange(location: 0, length: string.length)) 72 | 73 | guard !matches.isEmpty else { 74 | return template 75 | } 76 | 77 | for match in matches { 78 | if match.numberOfRanges < 4 { 79 | continue 80 | } 81 | 82 | let prefixRange = match.range(at: 1) 83 | let subjectRange = match.range(at: 2) 84 | let methodRange = match.range(at: 3) 85 | let otherRange = match.range(at: 4) 86 | 87 | if prefixRange.length > 0 { 88 | text += string.substring(with: prefixRange) 89 | } 90 | 91 | var subjectWithDot = subject + "." 92 | 93 | if subjectRange.length > 0 { 94 | subjectWithDot = string.substring(with: subjectRange) 95 | } 96 | 97 | if methodRange.length > 0 { 98 | let key = subjectWithDot.lowercased() + string.substring(with: methodRange) 99 | text += fetch(key) 100 | } 101 | 102 | if otherRange.length > 0 { 103 | text += string.substring(with: otherRange) 104 | } 105 | } 106 | } catch {} 107 | 108 | return text 109 | } 110 | 111 | private func fetchRaw(_ key: String, forLocale locale: String) -> Any? { 112 | let parts = key.components(separatedBy: ".") 113 | 114 | guard let localeData = data[locale] as? [String: Any], 115 | var parsed = localeData["faker"] as? [String: Any], 116 | !parts.isEmpty else { return nil } 117 | 118 | var result: Any? 119 | 120 | for part in parts { 121 | guard let parsedPart = parsed[part] as? [String: Any] else { 122 | result = parsed[part] 123 | continue 124 | } 125 | 126 | parsed = parsedPart 127 | result = parsedPart 128 | } 129 | 130 | return result 131 | } 132 | 133 | private func getSubject(_ key: String) -> String { 134 | var subject: String = "" 135 | var parts = key.components(separatedBy: ".") 136 | 137 | if !parts.isEmpty { 138 | subject = parts[0] 139 | } 140 | 141 | return subject 142 | } 143 | 144 | // MARK: - Data loading 145 | 146 | private func loadData(forLocale locale: String) { 147 | guard let localeData = provider.dataForLocale(locale), 148 | let parsedData = try? JSONSerialization.jsonObject(with: localeData, options: .allowFragments), 149 | let json = parsedData as? [String: Any], 150 | let localeJson = json[locale] else { 151 | print("JSON file for '\(locale)' locale was not found.") 152 | return 153 | } 154 | 155 | data[locale] = localeJson 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/AddressSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class AddressSpec: QuickSpec { 6 | override func spec() { 7 | describe("Address") { 8 | var address: Address! 9 | 10 | beforeEach { 11 | let parser = Parser(locale: "en-TEST") 12 | address = Address(parser: parser) 13 | } 14 | 15 | describe("#city") { 16 | it("returns the correct text") { 17 | let city = address.city() 18 | expect(city).to(equal("North Vadymtown")) 19 | } 20 | } 21 | 22 | describe("#streetName") { 23 | it("returns the correct text") { 24 | let streetName = address.streetName() 25 | expect(streetName).to(equal("Vadym Avenue")) 26 | } 27 | } 28 | 29 | describe("#secondaryAddress") { 30 | it("returns the correct text") { 31 | let secondaryAddress = address.secondaryAddress() 32 | expect(secondaryAddress).to(match("^Apt. \\d{3}$")) 33 | } 34 | } 35 | 36 | describe("#streetAddress") { 37 | context("without secondary") { 38 | it("returns the correct text") { 39 | let streetAddress = address.streetAddress() 40 | expect(streetAddress).to(match("^\\d{5} Vadym Avenue$")) 41 | } 42 | } 43 | 44 | context("include secondary") { 45 | it("returns the correct text") { 46 | let streetAddress = address.streetAddress(includeSecondary: true) 47 | expect(streetAddress).to(match("^\\d{5} Vadym Avenue Apt. \\d{3}$")) 48 | } 49 | } 50 | } 51 | 52 | describe("#buildingNumber") { 53 | it("returns the correct text") { 54 | let buildingNumber = address.buildingNumber() 55 | expect(buildingNumber).to(match("^\\d{5}$")) 56 | } 57 | } 58 | 59 | describe("#postcode") { 60 | context("without the state abbreviation") { 61 | it("returns the correct text") { 62 | let postcode = address.postcode() 63 | expect(postcode).to(match("^\\d{5}-\\d{4}$")) 64 | } 65 | } 66 | 67 | context("with the state abbreviation") { 68 | it("returns the correct text") { 69 | let postcode = address.postcode(stateAbbreviation: "CA") 70 | expect(postcode).to(match("^900\\d{2}$")) 71 | } 72 | } 73 | 74 | context("with the wrong state abbreviation") { 75 | it("returns the correct text") { 76 | let postcode = address.postcode(stateAbbreviation: "TE") 77 | expect(postcode).to(beEmpty()) 78 | } 79 | } 80 | } 81 | 82 | describe("#timeZone") { 83 | it("returns the correct text") { 84 | let timeZone = address.timeZone() 85 | expect(timeZone).to(equal("America/Los_Angeles")) 86 | } 87 | } 88 | 89 | describe("#streetSuffix") { 90 | it("returns the correct text") { 91 | let streetSuffix = address.streetSuffix() 92 | expect(streetSuffix).to(equal("Avenue")) 93 | } 94 | } 95 | 96 | describe("#citySuffix") { 97 | it("returns the correct text") { 98 | let citySuffix = address.citySuffix() 99 | expect(citySuffix).to(equal("town")) 100 | } 101 | } 102 | 103 | describe("#cityPrefix") { 104 | it("returns the correct text") { 105 | let cityPrefix = address.cityPrefix() 106 | expect(cityPrefix).to(equal("North")) 107 | } 108 | } 109 | 110 | describe("#stateAbbreviation") { 111 | it("returns the correct text") { 112 | let stateAbbreviation = address.stateAbbreviation() 113 | expect(stateAbbreviation).to(equal("CA")) 114 | } 115 | } 116 | 117 | describe("#state") { 118 | it("returns the correct text") { 119 | let state = address.state() 120 | expect(state).to(equal("California")) 121 | } 122 | } 123 | 124 | describe("#county") { 125 | it("returns the correct text") { 126 | let country = address.county() 127 | expect(country).to(equal("Autauga County")) 128 | } 129 | } 130 | 131 | describe("#country") { 132 | it("returns the correct text") { 133 | let country = address.country() 134 | expect(country).to(equal("United States of America")) 135 | } 136 | } 137 | 138 | describe("#countryCode") { 139 | it("returns the correct text") { 140 | let countryCode = address.countryCode() 141 | expect(countryCode).to(equal("US")) 142 | } 143 | } 144 | 145 | describe("#latitude") { 146 | it("returns non-zero value") { 147 | let latitude = address.latitude() 148 | expect(latitude).notTo(equal(0)) 149 | } 150 | } 151 | 152 | describe("#longitude") { 153 | it("returns non-zero value") { 154 | let longitude = address.longitude() 155 | expect(longitude).notTo(equal(0)) 156 | } 157 | } 158 | } 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /Tests/Fakery/Generators/InternetSpec.swift: -------------------------------------------------------------------------------- 1 | import Quick 2 | import Nimble 3 | @testable import Fakery 4 | 5 | final class InternetSpec: QuickSpec { 6 | override func spec() { 7 | describe("Internet") { 8 | let emailFormat = "[\\w._%+-]+@[\\w.-]+\\.\\w{2,}" 9 | var internet: Internet! 10 | 11 | beforeEach { 12 | let parser = Parser(locale: "en-TEST") 13 | internet = Internet(parser: parser) 14 | } 15 | 16 | describe("#username") { 17 | context("without separator - by default") { 18 | it("returns the correct text") { 19 | let username = internet.username() 20 | expect(username).to(match("^[A-Za-z]+(\\d+)?$")) 21 | } 22 | } 23 | 24 | context("with provided separator") { 25 | it("returns the correct text") { 26 | let username = internet.username(separator: "_") 27 | if username.lengthOfBytes(using: String.Encoding.utf8) > 5 { 28 | expect(username.contains("_")).notTo(beNil()) 29 | } else { 30 | expect(username.contains("_")).to(beNil()) 31 | } 32 | } 33 | } 34 | 35 | it("doesn't have the ' symbol in the result") { 36 | let username = internet.username(separator: "'_'") 37 | expect(username.contains("'")).to(beFalse()) 38 | } 39 | } 40 | 41 | describe("#domainName") { 42 | it("returns the correct text") { 43 | let domainName = internet.domainName() 44 | expect(domainName).to(equal("markov.com")) 45 | } 46 | } 47 | 48 | describe("#domainWord") { 49 | it("returns the correct text") { 50 | let domainWord = internet.domainWord() 51 | expect(domainWord).to(equal("markov")) 52 | } 53 | } 54 | 55 | describe("#domainSuffix") { 56 | it("returns the correct text") { 57 | let domainSuffix = internet.domainSuffix() 58 | expect(domainSuffix).to(equal("com")) 59 | } 60 | } 61 | 62 | describe("#email") { 63 | it("returns the correct email address") { 64 | let email = internet.email() 65 | expect(email).to(match(emailFormat)) 66 | } 67 | } 68 | 69 | describe("#freeEmail") { 70 | it("returns the correct email address") { 71 | let freeEmail = internet.freeEmail() 72 | expect(freeEmail).to(match(emailFormat)) 73 | expect(freeEmail).to(match("^[\\w._%+-]+@gmail.com$")) 74 | } 75 | } 76 | 77 | describe("#safeEmail") { 78 | it("returns the correct email address") { 79 | let safeEmail = internet.safeEmail() 80 | expect(safeEmail).to(match(emailFormat)) 81 | expect(safeEmail).to(match("^[\\w._%+-]+@example.(org|com|net)$")) 82 | } 83 | } 84 | 85 | describe("#password") { 86 | context("without min and max - 8...16 by default") { 87 | it("returns the correct password") { 88 | let password = internet.password() 89 | let length = password.lengthOfBytes(using: String.Encoding.utf8) 90 | expect(length >= 8 && length <= 16).to(beTrue()) 91 | } 92 | } 93 | 94 | context("with provided min length and max length") { 95 | it("returns the correct password when min = max") { 96 | let password = internet.password(minimumLength: 3, maximumLength: 3) 97 | let length = password.lengthOfBytes(using: String.Encoding.utf8) 98 | expect(length == 3).to(beTrue()) 99 | } 100 | 101 | it("returns the correct password when min > max") { 102 | let password = internet.password(minimumLength: 3, maximumLength: 4) 103 | let length = password.lengthOfBytes(using: String.Encoding.utf8) 104 | expect(length >= 3 && length <= 4).to(beTrue()) 105 | } 106 | 107 | it("returns the correct password when min < max") { 108 | let password = internet.password(minimumLength: 4, maximumLength: 3) 109 | let length = password.lengthOfBytes(using: String.Encoding.utf8) 110 | expect(length == 4).to(beTrue()) 111 | } 112 | } 113 | } 114 | 115 | describe("#ipV4Address") { 116 | it("returns the correct text") { 117 | let ipV4Address = internet.ipV4Address() 118 | expect(ipV4Address).to(match( 119 | "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])")) 120 | } 121 | } 122 | 123 | describe("#ipV6Address") { 124 | it("returns the correct text") { 125 | let ipV6Address = internet.ipV6Address() 126 | expect(ipV6Address).to(match( 127 | "^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4})")) 128 | } 129 | } 130 | 131 | describe("#url") { 132 | it("returns the correct URL") { 133 | let url = internet.url() 134 | expect(url).to(match("^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$")) 135 | } 136 | } 137 | 138 | describe("#image") { 139 | it("returns the correct Image URL with default size") { 140 | let url = internet.image() 141 | expect(url).to(equal("https://lorempixel.com/320/200")) 142 | } 143 | 144 | it("returns the correct Image URL with a specified size") { 145 | let url = internet.image(width: 200, height: 150) 146 | expect(url).to(equal("https://lorempixel.com/200/150")) 147 | } 148 | } 149 | 150 | describe("#templateImage") { 151 | it("returns the correct Image URL with defaults") { 152 | let url = internet.templateImage() 153 | expect(url).to(equal("https://dummyimage.com/320x200/000000/ffffff")) 154 | } 155 | 156 | it("returns the correct Image URL with a specified size") { 157 | let url = internet.templateImage(width: 200, height: 150, 158 | backColorHex: "2e4bc2", frontColorHex: "ccdb28") 159 | expect(url).to(equal("https://dummyimage.com/200x150/2e4bc2/ccdb28")) 160 | } 161 | } 162 | 163 | describe("#hashtag") { 164 | it("returns the correct hashtag") { 165 | let hashtag = internet.hashtag() 166 | expect(hashtag).to(equal("#art")) 167 | } 168 | } 169 | } 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /Resources/Locales/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "ko": { 3 | "faker": { 4 | "address": { 5 | "postcode": [ 6 | "###-###" 7 | ], 8 | "state": [ 9 | "강원", 10 | "경기", 11 | "경남", 12 | "경북", 13 | "광주", 14 | "대구", 15 | "대전", 16 | "부산", 17 | "서울", 18 | "울산", 19 | "인천", 20 | "전남", 21 | "전북", 22 | "제주", 23 | "충남", 24 | "충북", 25 | "세종" 26 | ], 27 | "state_abbr": [ 28 | "강원", 29 | "경기", 30 | "경남", 31 | "경북", 32 | "광주", 33 | "대구", 34 | "대전", 35 | "부산", 36 | "서울", 37 | "울산", 38 | "인천", 39 | "전남", 40 | "전북", 41 | "제주", 42 | "충남", 43 | "충북", 44 | "세종" 45 | ], 46 | "city_suffix": [ 47 | "구", 48 | "시", 49 | "군" 50 | ], 51 | "city_name": [ 52 | "강릉", 53 | "양양", 54 | "인제", 55 | "광주", 56 | "구리", 57 | "부천", 58 | "밀양", 59 | "통영", 60 | "창원", 61 | "거창", 62 | "고성", 63 | "양산", 64 | "김천", 65 | "구미", 66 | "영주", 67 | "광산", 68 | "남", 69 | "북", 70 | "고창", 71 | "군산", 72 | "남원", 73 | "동작", 74 | "마포", 75 | "송파", 76 | "용산", 77 | "부평", 78 | "강화", 79 | "수성" 80 | ], 81 | "city": [ 82 | "#{city_name}#{city_suffix}" 83 | ], 84 | "street_root": [ 85 | "상계", 86 | "화곡", 87 | "신정", 88 | "목", 89 | "잠실", 90 | "면목", 91 | "주안", 92 | "안양", 93 | "중", 94 | "정왕", 95 | "구로", 96 | "신월", 97 | "연산", 98 | "부평", 99 | "창", 100 | "만수", 101 | "중계", 102 | "검단", 103 | "시흥", 104 | "상도", 105 | "방배", 106 | "장유", 107 | "상", 108 | "광명", 109 | "신길", 110 | "행신", 111 | "대명", 112 | "동탄" 113 | ], 114 | "street_suffix": [ 115 | "읍", 116 | "면", 117 | "동" 118 | ], 119 | "street_name": [ 120 | "#{street_root}#{street_suffix}" 121 | ] 122 | }, 123 | "phone_number": { 124 | "formats": [ 125 | "0#-#####-####", 126 | "0##-###-####", 127 | "0##-####-####" 128 | ] 129 | }, 130 | "company": { 131 | "suffix": [ 132 | "연구소", 133 | "게임즈", 134 | "그룹", 135 | "전자", 136 | "물산", 137 | "코리아" 138 | ], 139 | "prefix": [ 140 | "주식회사", 141 | "한국" 142 | ], 143 | "name": [ 144 | "#{prefix} #{Name.first_name}", 145 | "#{Name.first_name} #{suffix}" 146 | ] 147 | }, 148 | "internet": { 149 | "free_email": [ 150 | "gmail.com", 151 | "yahoo.co.kr", 152 | "hanmail.net", 153 | "naver.com" 154 | ], 155 | "domain_suffix": [ 156 | "co.kr", 157 | "com", 158 | "biz", 159 | "info", 160 | "ne.kr", 161 | "net", 162 | "or.kr", 163 | "org" 164 | ] 165 | }, 166 | "lorem": { 167 | "words": [ 168 | "국가는", 169 | "법률이", 170 | "정하는", 171 | "바에", 172 | "의하여", 173 | "재외국민을", 174 | "보호할", 175 | "의무를", 176 | "진다.", 177 | "모든", 178 | "국민은", 179 | "신체의", 180 | "자유를", 181 | "가진다.", 182 | "국가는", 183 | "전통문화의", 184 | "계승·발전과", 185 | "민족문화의", 186 | "창달에", 187 | "노력하여야", 188 | "한다.", 189 | "통신·방송의", 190 | "시설기준과", 191 | "신문의", 192 | "기능을", 193 | "보장하기", 194 | "위하여", 195 | "필요한", 196 | "사항은", 197 | "법률로", 198 | "정한다.", 199 | "헌법에", 200 | "의하여", 201 | "체결·공포된", 202 | "조약과", 203 | "일반적으로", 204 | "승인된", 205 | "국제법규는", 206 | "국내법과", 207 | "같은", 208 | "효력을", 209 | "가진다.", 210 | "다만,", 211 | "현행범인인", 212 | "경우와", 213 | "장기", 214 | "3년", 215 | "이상의", 216 | "형에", 217 | "해당하는", 218 | "죄를", 219 | "범하고", 220 | "도피", 221 | "또는", 222 | "증거인멸의", 223 | "염려가", 224 | "있을", 225 | "때에는", 226 | "사후에", 227 | "영장을", 228 | "청구할", 229 | "수", 230 | "있다.", 231 | "저작자·발명가·과학기술자와", 232 | "예술가의", 233 | "권리는", 234 | "법률로써", 235 | "보호한다.", 236 | "형사피고인은", 237 | "유죄의", 238 | "판결이", 239 | "확정될", 240 | "때까지는", 241 | "무죄로", 242 | "추정된다.", 243 | "모든", 244 | "국민은", 245 | "행위시의", 246 | "법률에", 247 | "의하여", 248 | "범죄를", 249 | "구성하지", 250 | "아니하는", 251 | "행위로", 252 | "소추되지", 253 | "아니하며,", 254 | "동일한", 255 | "범죄에", 256 | "대하여", 257 | "거듭", 258 | "처벌받지", 259 | "아니한다.", 260 | "국가는", 261 | "평생교육을", 262 | "진흥하여야", 263 | "한다.", 264 | "모든", 265 | "국민은", 266 | "사생활의", 267 | "비밀과", 268 | "자유를", 269 | "침해받지", 270 | "아니한다.", 271 | "의무교육은", 272 | "무상으로", 273 | "한다.", 274 | "저작자·발명가·과학기술자와", 275 | "예술가의", 276 | "권리는", 277 | "법률로써", 278 | "보호한다.", 279 | "국가는", 280 | "모성의", 281 | "보호를", 282 | "위하여", 283 | "노력하여야", 284 | "한다.", 285 | "헌법에", 286 | "의하여", 287 | "체결·공포된", 288 | "조약과", 289 | "일반적으로", 290 | "승인된", 291 | "국제법규는", 292 | "국내법과", 293 | "같은", 294 | "효력을", 295 | "가진다." 296 | ] 297 | }, 298 | "name": { 299 | "last_name": [ 300 | "김", 301 | "이", 302 | "박", 303 | "최", 304 | "정", 305 | "강", 306 | "조", 307 | "윤", 308 | "장", 309 | "임", 310 | "오", 311 | "한", 312 | "신", 313 | "서", 314 | "권", 315 | "황", 316 | "안", 317 | "송", 318 | "류", 319 | "홍" 320 | ], 321 | "first_name": [ 322 | "서연", 323 | "민서", 324 | "서현", 325 | "지우", 326 | "서윤", 327 | "지민", 328 | "수빈", 329 | "하은", 330 | "예은", 331 | "윤서", 332 | "민준", 333 | "지후", 334 | "지훈", 335 | "준서", 336 | "현우", 337 | "예준", 338 | "건우", 339 | "현준", 340 | "민재", 341 | "우진", 342 | "은주" 343 | ], 344 | "name": [ 345 | "#{last_name} #{first_name}" 346 | ] 347 | } 348 | } 349 | } 350 | } 351 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Fakery logo](https://raw.githubusercontent.com/vadymmarkov/Fakery/master/Images/logo.png) 2 | [![CI Status](http://img.shields.io/travis/vadymmarkov/Fakery.svg?style=flat)](https://travis-ci.org/vadymmarkov/Fakery) 3 | [![Version](https://img.shields.io/cocoapods/v/Fakery.svg?style=flat)](http://cocoadocs.org/docsets/Fakery) 4 | [![License](https://img.shields.io/cocoapods/l/Fakery.svg?style=flat)](http://cocoadocs.org/docsets/Fakery) 5 | [![Platform](https://img.shields.io/cocoapods/p/Fakery.svg?style=flat)](http://cocoadocs.org/docsets/Fakery) 6 | 7 | This is a Swift port of Ruby's [Faker](https://github.com/stympy/faker) library that generates fake data. 8 | 9 | Are you still bothered with meaningless randomly character strings? Just relax and leave this job to **Fakery**. 10 | It's useful in all the cases when you need to use some dummy data for testing, population of database during development, etc. 11 | 12 | **NOTE**: Generated data is pretty realistic, supports a range of locales, but returned values are not guaranteed to be unique. 13 | 14 | ## Table of Contents 15 | 16 | * [Usage](#usage) 17 | * [Localization](#localization) 18 | * [Generators](#generators) 19 | * [Address](#address) 20 | * [App](#app) 21 | * [Business](#business) 22 | * [Commerce](#commerce) 23 | * [Company](#company) 24 | * [Internet](#internet) 25 | * [Lorem](#lorem) 26 | * [Name](#name) 27 | * [Number](#number) 28 | * [Phone number](#phone-number) 29 | * [Team](#team) 30 | * [Bank](#bank) 31 | * [Installation](#installation) 32 | * [Contributing](#contributing) 33 | * [Author](#author) 34 | * [License](#license) 35 | 36 | ## Usage 37 | 38 | ```swift 39 | 40 | let faker = Faker(locale: "nb-NO") 41 | 42 | let firstName = faker.name.firstName() //=> "Emilie" 43 | let lastName = faker.name.lastName() //=> "Hansen" 44 | let city = faker.address.city() //=> "Oslo" 45 | ``` 46 | 47 | ## Localization 48 | 49 | **Fakery** is quite powerful when it comes to generation of locale-specific data. 50 | In `Resources/Locales` you can find JSON files for more than 20 locales, and, of course, it's not a limit. 51 | Feel free to contribute and add more! 52 | 53 | The default locale is English. When you use one of the available generators and 54 | the corresponding key is not found in a JSON file for the currently selected 55 | locale **Fakery** will also check if it exists in "en.json" file. 56 | 57 | ## Generators 58 | 59 | ### Address 60 | 61 | ```swift 62 | 63 | faker.address.city() //=> "Oslo" 64 | faker.address.streetName() //=> "North Avenue" 65 | faker.address.secondaryAddress() //=> "Apt. 123" 66 | faker.address.streetAddress(includeSecondary: Bool) //=> "12 North Avenue" 67 | faker.address.buildingNumber() //=> "123" 68 | faker.address.postcode(stateAbbreviation: String) //=> "0884" 69 | faker.address.timeZone() //=> "America/Los_Angeles" 70 | faker.address.streetSuffix() //=> "Avenue" 71 | faker.address.citySuffix() //=> "town" 72 | faker.address.cityPrefix() //=> "North" 73 | faker.address.stateAbbreviation() //=> "CA" 74 | faker.address.state() //=> "California" 75 | faker.address.county() //=> "Autauga County" 76 | faker.address.country() //=> "United States of America" 77 | faker.address.countryCode() //=> "US" 78 | faker.address.latitude() //=> -58.17256227443719 79 | faker.address.longitude() //=> -156.65548382095133 80 | faker.address.coordinate() //=> CLLocationCoordinate2D(latitude: 40.97868, longitude: 29.09306) 81 | ``` 82 | 83 | ### App 84 | 85 | ```swift 86 | 87 | faker.app.name() //=> "Namfix" 88 | faker.app.version() //=> "0.1.1" 89 | faker.app.author() //=> "Ida Adams" 90 | ``` 91 | 92 | ### Business 93 | 94 | ```swift 95 | 96 | faker.business.creditCardNumber() //=> "1234-2121-1221-1211" 97 | faker.business.creditCardType() //=> "visa" 98 | faker.business.creditCardExpiryDate() //=> "2020-10-12" 99 | ``` 100 | 101 | ### Commerce 102 | 103 | ```swift 104 | 105 | faker.commerce.color() //=> "black" 106 | faker.commerce.department(maximum: Int, fixedAmount: Bool) //=> "Music" 107 | faker.commerce.productName() //=> "Awesome Wooden Hat" 108 | faker.commerce.price() // 90.5 109 | ``` 110 | 111 | ### Company 112 | 113 | ```swift 114 | 115 | faker.company.name() //=> "Adams Inc" 116 | faker.company.suffix() //=> "Inc" 117 | faker.company.catchPhrase() //=> "Universal software" 118 | faker.company.bs() //=> "implement innovative methodologies" 119 | faker.company.logo() // "http://pigment.github.io/fake-logos/logos/medium/color/1.png" 120 | ``` 121 | 122 | ### Internet 123 | 124 | ```swift 125 | 126 | faker.internet.username(separator: String?) //=> "ida4" 127 | faker.internet.domainName(alphaNumericOnly: Bool) //=> "example.com" 128 | faker.internet.domainWord(alphaNumericOnly: Bool) //=> "domainword" 129 | faker.internet.domainSuffix() //=> "com" 130 | faker.internet.email() // => "ida4@some.info" 131 | faker.internet.freeEmail() //=> "gmail.com" 132 | faker.internet.safeEmail() //=> "adams@example.org" 133 | faker.internet.password(minimumLength: Int, maximumLength: Int) //=> "e2dddhwd1g5qhvhgfi" 134 | faker.internet.ipV4Address() //=> "24.29.18.175" 135 | faker.internet.ipV6Address() //=> "ac5f:d696:3807:1d72:2eb5:4e81:7d2b:e1df" 136 | faker.internet.url() //=> "http://example.com/ida4" 137 | faker.internet.image() //=> "http://lorempixel.com/320/200" 138 | faker.internet.templateImage() //=> "http://dummyimage.com/320x200/000000/ffffff" 139 | faker.internet.hashtag() //=> "#art" 140 | 141 | ``` 142 | 143 | ### Lorem 144 | 145 | ```swift 146 | 147 | faker.lorem.word() //=> "repellendus" 148 | faker.lorem.words(amount: Int) //=> ["dolores", "adipisci", "nesciunt"] 149 | faker.lorem.character() //=> "a" 150 | faker.lorem.characters(amount: Int) // Default = 255 151 | faker.lorem.sentence(wordsAmount: Int) // Default = 4 152 | faker.lorem.sentences(amount: Int) // Default = 3 153 | faker.lorem.paragraph(sentencesAmount: Int) // Default = 3 154 | faker.lorem.paragraphs(amount: Int) // Default = 3 155 | ``` 156 | 157 | ### Name 158 | 159 | ```swift 160 | 161 | faker.name.name() //=> "Ida Adams" 162 | faker.name.firstName() //=> "Ida" 163 | faker.name.lastName() //=> "Adams" 164 | faker.name.prefix() //=> "Mrs." 165 | faker.name.suffix() //=> "PhD" 166 | faker.name.title() //=> "Lead" 167 | ``` 168 | 169 | ### Number 170 | 171 | ```swift 172 | 173 | faker.number.randomBool() //=> true or false 174 | faker.number.randomInt() //=> some Int between 0 and 1000 175 | faker.number.randomInt(min: -100, max:50) //=> some Int between -100 and 50 176 | faker.number.randomFloat() //=> some Float between 0 and 1000 177 | faker.number.randomFloat(min: -10.4, max:50) //=> some Float between -10.4 and 50 178 | faker.number.randomCGFloat() //=> some CGFloat between 0 and 1000 179 | faker.number.randomCGFloat(min: 42.42, max:86) //=> some CGFloat between -42.42 and 86 180 | faker.number.randomDouble() //=> some Double between 0 and 1000 181 | faker.number.randomDouble(min: 0, max:1) //=> some Double between 0 and 1 182 | faker.number.increasingUniqueId() //=> every call returns an unique int 183 | ``` 184 | 185 | ### Phone number 186 | 187 | ```swift 188 | 189 | faker.phoneNumber.phoneNumber() //=> "1-333-333-3333" 190 | faker.phoneNumber.cellPhone() //=> "333-333-3333" 191 | faker.phoneNumber.areaCode() //=> "201" 192 | faker.phoneNumber.exchangeCode() //=> "201" 193 | faker.phoneNumber.subscriberNumber() //=> "1234" 194 | faker.phoneNumber.numberExtension(length: Int) // "123" 195 | ``` 196 | 197 | ### Team 198 | 199 | ```swift 200 | 201 | faker.team.name() //=> "bats" 202 | faker.team.creature() //=> "Alabama bats" 203 | faker.team.state() // => "Alabama" 204 | ``` 205 | 206 | ### Bank 207 | 208 | ```swift 209 | faker.bank.name() //=> "ABN AMRO CORPORATE FINANCE LIMITED" 210 | faker.bank.swiftBic() //=> "AAFMGB21" 211 | faker.bank.iban() // => "NL45BUNQ2209931378" 212 | faker.bank.bban() //=> ABNA0136468471 213 | ``` 214 | 215 | ## Installation 216 | 217 | **Fakery** is available through [CocoaPods](http://cocoapods.org). To install 218 | it, simply add the following line to your Podfile: 219 | 220 | ```ruby 221 | pod 'Fakery' 222 | ``` 223 | 224 | ## Contributing 225 | 226 | Please see our [playbook](https://github.com/hyperoslo/playbook/blob/master/GIT_AND_GITHUB.md) for guidelines on contributing. 227 | 228 | ## Author 229 | 230 | Vadym Markov, markov.vadym@gmail.com 231 | 232 | ## License 233 | 234 | **Fakery** is available under the MIT license. See the LICENSE file for more info. 235 | -------------------------------------------------------------------------------- /Resources/Locales/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "zh-CN": { 3 | "faker": { 4 | "address": { 5 | "city_prefix": [ 6 | "长", 7 | "上", 8 | "南", 9 | "西", 10 | "北", 11 | "诸", 12 | "宁", 13 | "珠", 14 | "武", 15 | "衡", 16 | "成", 17 | "福", 18 | "厦", 19 | "贵", 20 | "吉", 21 | "海", 22 | "太", 23 | "济", 24 | "安", 25 | "吉", 26 | "包" 27 | ], 28 | "city_suffix": [ 29 | "沙市", 30 | "京市", 31 | "宁市", 32 | "安市", 33 | "乡县", 34 | "海市", 35 | "码市", 36 | "汉市", 37 | "阳市", 38 | "都市", 39 | "州市", 40 | "门市", 41 | "阳市", 42 | "口市", 43 | "原市", 44 | "南市", 45 | "徽市", 46 | "林市", 47 | "头市" 48 | ], 49 | "building_number": [ 50 | "#####", 51 | "####", 52 | "###", 53 | "##", 54 | "#" 55 | ], 56 | "street_suffix": [ 57 | "巷", 58 | "街", 59 | "路", 60 | "桥", 61 | "侬", 62 | "旁", 63 | "中心", 64 | "栋" 65 | ], 66 | "postcode": [ 67 | "######" 68 | ], 69 | "state": [ 70 | "北京市", 71 | "上海市", 72 | "天津市", 73 | "重庆市", 74 | "黑龙江省", 75 | "吉林省", 76 | "辽宁省", 77 | "内蒙古", 78 | "河北省", 79 | "新疆", 80 | "甘肃省", 81 | "青海省", 82 | "陕西省", 83 | "宁夏", 84 | "河南省", 85 | "山东省", 86 | "山西省", 87 | "安徽省", 88 | "湖北省", 89 | "湖南省", 90 | "江苏省", 91 | "四川省", 92 | "贵州省", 93 | "云南省", 94 | "广西省", 95 | "西藏", 96 | "浙江省", 97 | "江西省", 98 | "广东省", 99 | "福建省", 100 | "海南省", 101 | "香港", 102 | "澳门" 103 | ], 104 | "state_abbr": [ 105 | "京", 106 | "沪", 107 | "津", 108 | "渝", 109 | "黑", 110 | "吉", 111 | "辽", 112 | "蒙", 113 | "冀", 114 | "新", 115 | "甘", 116 | "青", 117 | "陕", 118 | "宁", 119 | "豫", 120 | "鲁", 121 | "晋", 122 | "皖", 123 | "鄂", 124 | "湘", 125 | "苏", 126 | "川", 127 | "黔", 128 | "滇", 129 | "桂", 130 | "藏", 131 | "浙", 132 | "赣", 133 | "粤", 134 | "闽", 135 | "琼", 136 | "港", 137 | "澳" 138 | ], 139 | "city": [ 140 | "#{city_prefix}#{city_suffix}" 141 | ], 142 | "street_name": [ 143 | "#{Name.last_name}#{street_suffix}" 144 | ], 145 | "street_address": [ 146 | "#{street_name}#{building_number}号" 147 | ], 148 | "default_country": [ 149 | "中国" 150 | ] 151 | }, 152 | "name": { 153 | "last_name": [ 154 | "王", 155 | "李", 156 | "张", 157 | "刘", 158 | "陈", 159 | "杨", 160 | "黄", 161 | "吴", 162 | "赵", 163 | "周", 164 | "徐", 165 | "孙", 166 | "马", 167 | "朱", 168 | "胡", 169 | "林", 170 | "郭", 171 | "何", 172 | "高", 173 | "罗", 174 | "郑", 175 | "梁", 176 | "谢", 177 | "宋", 178 | "唐", 179 | "许", 180 | "邓", 181 | "冯", 182 | "韩", 183 | "曹", 184 | "曾", 185 | "彭", 186 | "萧", 187 | "蔡", 188 | "潘", 189 | "田", 190 | "董", 191 | "袁", 192 | "于", 193 | "余", 194 | "叶", 195 | "蒋", 196 | "杜", 197 | "苏", 198 | "魏", 199 | "程", 200 | "吕", 201 | "丁", 202 | "沈", 203 | "任", 204 | "姚", 205 | "卢", 206 | "傅", 207 | "钟", 208 | "姜", 209 | "崔", 210 | "谭", 211 | "廖", 212 | "范", 213 | "汪", 214 | "陆", 215 | "金", 216 | "石", 217 | "戴", 218 | "贾", 219 | "韦", 220 | "夏", 221 | "邱", 222 | "方", 223 | "侯", 224 | "邹", 225 | "熊", 226 | "孟", 227 | "秦", 228 | "白", 229 | "江", 230 | "阎", 231 | "薛", 232 | "尹", 233 | "段", 234 | "雷", 235 | "黎", 236 | "史", 237 | "龙", 238 | "陶", 239 | "贺", 240 | "顾", 241 | "毛", 242 | "郝", 243 | "龚", 244 | "邵", 245 | "万", 246 | "钱", 247 | "严", 248 | "赖", 249 | "覃", 250 | "洪", 251 | "武", 252 | "莫", 253 | "孔" 254 | ], 255 | "first_name": [ 256 | "绍齐", 257 | "博文", 258 | "梓晨", 259 | "胤祥", 260 | "瑞霖", 261 | "明哲", 262 | "天翊", 263 | "凯瑞", 264 | "健雄", 265 | "耀杰", 266 | "潇然", 267 | "子涵", 268 | "越彬", 269 | "钰轩", 270 | "智辉", 271 | "致远", 272 | "俊驰", 273 | "雨泽", 274 | "烨磊", 275 | "晟睿", 276 | "文昊", 277 | "修洁", 278 | "黎昕", 279 | "远航", 280 | "旭尧", 281 | "鸿涛", 282 | "伟祺", 283 | "荣轩", 284 | "越泽", 285 | "浩宇", 286 | "瑾瑜", 287 | "皓轩", 288 | "擎苍", 289 | "擎宇", 290 | "志泽", 291 | "子轩", 292 | "睿渊", 293 | "弘文", 294 | "哲瀚", 295 | "雨泽", 296 | "楷瑞", 297 | "建辉", 298 | "晋鹏", 299 | "天磊", 300 | "绍辉", 301 | "泽洋", 302 | "鑫磊", 303 | "鹏煊", 304 | "昊强", 305 | "伟宸", 306 | "博超", 307 | "君浩", 308 | "子骞", 309 | "鹏涛", 310 | "炎彬", 311 | "鹤轩", 312 | "越彬", 313 | "风华", 314 | "靖琪", 315 | "明辉", 316 | "伟诚", 317 | "明轩", 318 | "健柏", 319 | "修杰", 320 | "志泽", 321 | "弘文", 322 | "峻熙", 323 | "嘉懿", 324 | "煜城", 325 | "懿轩", 326 | "烨伟", 327 | "苑博", 328 | "伟泽", 329 | "熠彤", 330 | "鸿煊", 331 | "博涛", 332 | "烨霖", 333 | "烨华", 334 | "煜祺", 335 | "智宸", 336 | "正豪", 337 | "昊然", 338 | "明杰", 339 | "立诚", 340 | "立轩", 341 | "立辉", 342 | "峻熙", 343 | "弘文", 344 | "熠彤", 345 | "鸿煊", 346 | "烨霖", 347 | "哲瀚", 348 | "鑫鹏", 349 | "昊天", 350 | "思聪", 351 | "展鹏", 352 | "笑愚", 353 | "志强", 354 | "炫明", 355 | "雪松", 356 | "思源", 357 | "智渊", 358 | "思淼", 359 | "晓啸", 360 | "天宇", 361 | "浩然", 362 | "文轩", 363 | "鹭洋", 364 | "振家", 365 | "乐驹", 366 | "晓博", 367 | "文博", 368 | "昊焱", 369 | "立果", 370 | "金鑫", 371 | "锦程", 372 | "嘉熙", 373 | "鹏飞", 374 | "子默", 375 | "思远", 376 | "浩轩", 377 | "语堂", 378 | "聪健", 379 | "明", 380 | "文", 381 | "果", 382 | "思", 383 | "鹏", 384 | "驰", 385 | "涛", 386 | "琪", 387 | "浩", 388 | "航", 389 | "彬" 390 | ], 391 | "name": [ 392 | "#{last_name}#{first_name}" 393 | ] 394 | }, 395 | "phone_number": { 396 | "formats": [ 397 | "###-########", 398 | "####-########", 399 | "###########" 400 | ] 401 | } 402 | } 403 | } 404 | } 405 | -------------------------------------------------------------------------------- /Resources/Locales/nb-NO.json: -------------------------------------------------------------------------------- 1 | { 2 | "nb-NO": { 3 | "faker": { 4 | "address": { 5 | "city_root": [ 6 | "Fet", 7 | "Gjes", 8 | "Høy", 9 | "Inn", 10 | "Fager", 11 | "Lille", 12 | "Lo", 13 | "Mal", 14 | "Nord", 15 | "Nær", 16 | "Sand", 17 | "Sme", 18 | "Stav", 19 | "Stor", 20 | "Tand", 21 | "Ut", 22 | "Vest" 23 | ], 24 | "city_suffix": [ 25 | "berg", 26 | "borg", 27 | "by", 28 | "bø", 29 | "dal", 30 | "eid", 31 | "fjell", 32 | "fjord", 33 | "foss", 34 | "grunn", 35 | "hamn", 36 | "havn", 37 | "helle", 38 | "mark", 39 | "nes", 40 | "odden", 41 | "sand", 42 | "sjøen", 43 | "stad", 44 | "strand", 45 | "strøm", 46 | "sund", 47 | "vik", 48 | "vær", 49 | "våg", 50 | "ø", 51 | "øy", 52 | "ås" 53 | ], 54 | "street_prefix": [ 55 | "Øvre", 56 | "Nedre", 57 | "Søndre", 58 | "Gamle", 59 | "Østre", 60 | "Vestre" 61 | ], 62 | "street_root": [ 63 | "Eike", 64 | "Bjørke", 65 | "Gran", 66 | "Vass", 67 | "Furu", 68 | "Litj", 69 | "Lille", 70 | "Høy", 71 | "Fosse", 72 | "Elve", 73 | "Ku", 74 | "Konvall", 75 | "Soldugg", 76 | "Hestemyr", 77 | "Granitt", 78 | "Hegge", 79 | "Rogne", 80 | "Fiol", 81 | "Sol", 82 | "Ting", 83 | "Malm", 84 | "Klokker", 85 | "Preste", 86 | "Dam", 87 | "Geiterygg", 88 | "Bekke", 89 | "Berg", 90 | "Kirke", 91 | "Kors", 92 | "Bru", 93 | "Blåveis", 94 | "Torg", 95 | "Sjø" 96 | ], 97 | "street_suffix": [ 98 | "alléen", 99 | "bakken", 100 | "berget", 101 | "bråten", 102 | "eggen", 103 | "engen", 104 | "ekra", 105 | "faret", 106 | "flata", 107 | "gata", 108 | "gjerdet", 109 | "grenda", 110 | "gropa", 111 | "hagen", 112 | "haugen", 113 | "havna", 114 | "holtet", 115 | "høgda", 116 | "jordet", 117 | "kollen", 118 | "kroken", 119 | "lia", 120 | "lunden", 121 | "lyngen", 122 | "løkka", 123 | "marka", 124 | "moen", 125 | "myra", 126 | "plassen", 127 | "ringen", 128 | "roa", 129 | "røa", 130 | "skogen", 131 | "skrenten", 132 | "spranget", 133 | "stien", 134 | "stranda", 135 | "stubben", 136 | "stykket", 137 | "svingen", 138 | "tjernet", 139 | "toppen", 140 | "tunet", 141 | "vollen", 142 | "vika", 143 | "åsen" 144 | ], 145 | "common_street_suffix": [ 146 | "sgate", 147 | "svei", 148 | "s Gate", 149 | "s Vei", 150 | "gata", 151 | "veien" 152 | ], 153 | "building_number": [ 154 | "#", 155 | "##" 156 | ], 157 | "secondary_address": [ 158 | "Leil. ###", 159 | "Oppgang A", 160 | "Oppgang B" 161 | ], 162 | "postcode": [ 163 | "####", 164 | "####", 165 | "####", 166 | "0###" 167 | ], 168 | "state": [ 169 | "" 170 | ], 171 | "city": [ 172 | "#{city_root}#{city_suffix}" 173 | ], 174 | "street_name": [ 175 | "#{street_root}#{street_suffix}", 176 | "#{street_prefix} #{street_root}#{street_suffix}", 177 | "#{Name.first_name}#{common_street_suffix}", 178 | "#{Name.last_name}#{common_street_suffix}" 179 | ], 180 | "street_address": [ 181 | "#{street_name} #{building_number}" 182 | ], 183 | "default_country": [ 184 | "Norge" 185 | ] 186 | }, 187 | "company": { 188 | "suffix": [ 189 | "Gruppen", 190 | "AS", 191 | "ASA", 192 | "BA", 193 | "RFH", 194 | "og Sønner" 195 | ], 196 | "name": [ 197 | "#{Name.last_name} #{suffix}", 198 | "#{Name.last_name}-#{Name.last_name}", 199 | "#{Name.last_name}, #{Name.last_name} og #{Name.last_name}" 200 | ] 201 | }, 202 | "internet": { 203 | "domain_suffix": [ 204 | "no", 205 | "com", 206 | "net", 207 | "org" 208 | ] 209 | }, 210 | "name": { 211 | "first_name": [ 212 | "Emma", 213 | "Sara", 214 | "Thea", 215 | "Ida", 216 | "Julie", 217 | "Nora", 218 | "Emilie", 219 | "Ingrid", 220 | "Hanna", 221 | "Maria", 222 | "Sofie", 223 | "Anna", 224 | "Malin", 225 | "Amalie", 226 | "Vilde", 227 | "Frida", 228 | "Andrea", 229 | "Tuva", 230 | "Victoria", 231 | "Mia", 232 | "Karoline", 233 | "Mathilde", 234 | "Martine", 235 | "Linnea", 236 | "Marte", 237 | "Hedda", 238 | "Marie", 239 | "Helene", 240 | "Silje", 241 | "Leah", 242 | "Maja", 243 | "Elise", 244 | "Oda", 245 | "Kristine", 246 | "Aurora", 247 | "Kaja", 248 | "Camilla", 249 | "Mari", 250 | "Maren", 251 | "Mina", 252 | "Selma", 253 | "Jenny", 254 | "Celine", 255 | "Eline", 256 | "Sunniva", 257 | "Natalie", 258 | "Tiril", 259 | "Synne", 260 | "Sandra", 261 | "Madeleine", 262 | "Markus", 263 | "Mathias", 264 | "Kristian", 265 | "Jonas", 266 | "Andreas", 267 | "Alexander", 268 | "Martin", 269 | "Sander", 270 | "Daniel", 271 | "Magnus", 272 | "Henrik", 273 | "Tobias", 274 | "Kristoffer", 275 | "Emil", 276 | "Adrian", 277 | "Sebastian", 278 | "Marius", 279 | "Elias", 280 | "Fredrik", 281 | "Thomas", 282 | "Sondre", 283 | "Benjamin", 284 | "Jakob", 285 | "Oliver", 286 | "Lucas", 287 | "Oskar", 288 | "Nikolai", 289 | "Filip", 290 | "Mats", 291 | "William", 292 | "Erik", 293 | "Simen", 294 | "Ole", 295 | "Eirik", 296 | "Isak", 297 | "Kasper", 298 | "Noah", 299 | "Lars", 300 | "Joakim", 301 | "Johannes", 302 | "Håkon", 303 | "Sindre", 304 | "Jørgen", 305 | "Herman", 306 | "Anders", 307 | "Jonathan", 308 | "Even", 309 | "Theodor", 310 | "Mikkel", 311 | "Aksel" 312 | ], 313 | "feminine_name": [ 314 | "Emma", 315 | "Sara", 316 | "Thea", 317 | "Ida", 318 | "Julie", 319 | "Nora", 320 | "Emilie", 321 | "Ingrid", 322 | "Hanna", 323 | "Maria", 324 | "Sofie", 325 | "Anna", 326 | "Malin", 327 | "Amalie", 328 | "Vilde", 329 | "Frida", 330 | "Andrea", 331 | "Tuva", 332 | "Victoria", 333 | "Mia", 334 | "Karoline", 335 | "Mathilde", 336 | "Martine", 337 | "Linnea", 338 | "Marte", 339 | "Hedda", 340 | "Marie", 341 | "Helene", 342 | "Silje", 343 | "Leah", 344 | "Maja", 345 | "Elise", 346 | "Oda", 347 | "Kristine", 348 | "Aurora", 349 | "Kaja", 350 | "Camilla", 351 | "Mari", 352 | "Maren", 353 | "Mina", 354 | "Selma", 355 | "Jenny", 356 | "Celine", 357 | "Eline", 358 | "Sunniva", 359 | "Natalie", 360 | "Tiril", 361 | "Synne", 362 | "Sandra", 363 | "Madeleine" 364 | ], 365 | "masculine_name": [ 366 | "Markus", 367 | "Mathias", 368 | "Kristian", 369 | "Jonas", 370 | "Andreas", 371 | "Alexander", 372 | "Martin", 373 | "Sander", 374 | "Daniel", 375 | "Magnus", 376 | "Henrik", 377 | "Tobias", 378 | "Kristoffer", 379 | "Emil", 380 | "Adrian", 381 | "Sebastian", 382 | "Marius", 383 | "Elias", 384 | "Fredrik", 385 | "Thomas", 386 | "Sondre", 387 | "Benjamin", 388 | "Jakob", 389 | "Oliver", 390 | "Lucas", 391 | "Oskar", 392 | "Nikolai", 393 | "Filip", 394 | "Mats", 395 | "William", 396 | "Erik", 397 | "Simen", 398 | "Ole", 399 | "Eirik", 400 | "Isak", 401 | "Kasper", 402 | "Noah", 403 | "Lars", 404 | "Joakim", 405 | "Johannes", 406 | "Håkon", 407 | "Sindre", 408 | "Jørgen", 409 | "Herman", 410 | "Anders", 411 | "Jonathan", 412 | "Even", 413 | "Theodor", 414 | "Mikkel", 415 | "Aksel" 416 | ], 417 | "last_name": [ 418 | "Johansen", 419 | "Hansen", 420 | "Andersen", 421 | "Kristiansen", 422 | "Larsen", 423 | "Olsen", 424 | "Solberg", 425 | "Andresen", 426 | "Pedersen", 427 | "Nilsen", 428 | "Berg", 429 | "Halvorsen", 430 | "Karlsen", 431 | "Svendsen", 432 | "Jensen", 433 | "Haugen", 434 | "Martinsen", 435 | "Eriksen", 436 | "Sørensen", 437 | "Johnsen", 438 | "Myhrer", 439 | "Johannessen", 440 | "Nielsen", 441 | "Hagen", 442 | "Pettersen", 443 | "Bakke", 444 | "Skuterud", 445 | "Løken", 446 | "Gundersen", 447 | "Strand", 448 | "Jørgensen", 449 | "Kvarme", 450 | "Røed", 451 | "Sæther", 452 | "Stensrud", 453 | "Moe", 454 | "Kristoffersen", 455 | "Jakobsen", 456 | "Holm", 457 | "Aas", 458 | "Lie", 459 | "Moen", 460 | "Andreassen", 461 | "Vedvik", 462 | "Nguyen", 463 | "Jacobsen", 464 | "Torgersen", 465 | "Ruud", 466 | "Krogh", 467 | "Christiansen", 468 | "Bjerke", 469 | "Aalerud", 470 | "Borge", 471 | "Sørlie", 472 | "Berge", 473 | "Østli", 474 | "Ødegård", 475 | "Torp", 476 | "Henriksen", 477 | "Haukelidsæter", 478 | "Fjeld", 479 | "Danielsen", 480 | "Aasen", 481 | "Fredriksen", 482 | "Dahl", 483 | "Berntsen", 484 | "Arnesen", 485 | "Wold", 486 | "Thoresen", 487 | "Solheim", 488 | "Skoglund", 489 | "Bakken", 490 | "Amundsen", 491 | "Solli", 492 | "Smogeli", 493 | "Kristensen", 494 | "Glosli", 495 | "Fossum", 496 | "Evensen", 497 | "Eide", 498 | "Carlsen", 499 | "Østby", 500 | "Vegge", 501 | "Tangen", 502 | "Smedsrud", 503 | "Olstad", 504 | "Lunde", 505 | "Kleven", 506 | "Huseby", 507 | "Bjørnstad", 508 | "Ryan", 509 | "Rasmussen", 510 | "Nygård", 511 | "Nordskaug", 512 | "Nordby", 513 | "Mathisen", 514 | "Hopland", 515 | "Gran", 516 | "Finstad", 517 | "Edvardsen" 518 | ], 519 | "prefix": [ 520 | "Dr.", 521 | "Prof." 522 | ], 523 | "suffix": [ 524 | "Jr.", 525 | "Sr.", 526 | "I", 527 | "II", 528 | "III", 529 | "IV", 530 | "V" 531 | ], 532 | "name": [ 533 | "#{prefix} #{first_name} #{last_name}", 534 | "#{first_name} #{last_name} #{suffix}", 535 | "#{feminine_name} #{feminine_name} #{last_name}", 536 | "#{masculine_name} #{masculine_name} #{last_name}", 537 | "#{first_name} #{last_name} #{last_name}", 538 | "#{first_name} #{last_name}" 539 | ] 540 | }, 541 | "phone_number": { 542 | "formats": [ 543 | "########", 544 | "## ## ## ##", 545 | "### ## ###", 546 | "+47 ## ## ## ##" 547 | ] 548 | } 549 | } 550 | } 551 | } 552 | -------------------------------------------------------------------------------- /Resources/Locales/en-AU.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-AU": { 3 | "faker": { 4 | "name": { 5 | "first_name": [ 6 | "William", 7 | "Jack", 8 | "Oliver", 9 | "Joshua", 10 | "Thomas", 11 | "Lachlan", 12 | "Cooper", 13 | "Noah", 14 | "Ethan", 15 | "Lucas", 16 | "James", 17 | "Samuel", 18 | "Jacob", 19 | "Liam", 20 | "Alexander", 21 | "Benjamin", 22 | "Max", 23 | "Isaac", 24 | "Daniel", 25 | "Riley", 26 | "Ryan", 27 | "Charlie", 28 | "Tyler", 29 | "Jake", 30 | "Matthew", 31 | "Xavier", 32 | "Harry", 33 | "Jayden", 34 | "Nicholas", 35 | "Harrison", 36 | "Levi", 37 | "Luke", 38 | "Adam", 39 | "Henry", 40 | "Aiden", 41 | "Dylan", 42 | "Oscar", 43 | "Michael", 44 | "Jackson", 45 | "Logan", 46 | "Joseph", 47 | "Blake", 48 | "Nathan", 49 | "Connor", 50 | "Elijah", 51 | "Nate", 52 | "Archie", 53 | "Bailey", 54 | "Marcus", 55 | "Cameron", 56 | "Jordan", 57 | "Zachary", 58 | "Caleb", 59 | "Hunter", 60 | "Ashton", 61 | "Toby", 62 | "Aidan", 63 | "Hayden", 64 | "Mason", 65 | "Hamish", 66 | "Edward", 67 | "Angus", 68 | "Eli", 69 | "Sebastian", 70 | "Christian", 71 | "Patrick", 72 | "Andrew", 73 | "Anthony", 74 | "Luca", 75 | "Kai", 76 | "Beau", 77 | "Alex", 78 | "George", 79 | "Callum", 80 | "Finn", 81 | "Zac", 82 | "Mitchell", 83 | "Jett", 84 | "Jesse", 85 | "Gabriel", 86 | "Leo", 87 | "Declan", 88 | "Charles", 89 | "Jasper", 90 | "Jonathan", 91 | "Aaron", 92 | "Hugo", 93 | "David", 94 | "Christopher", 95 | "Chase", 96 | "Owen", 97 | "Justin", 98 | "Ali", 99 | "Darcy", 100 | "Lincoln", 101 | "Cody", 102 | "Phoenix", 103 | "Sam", 104 | "John", 105 | "Joel", 106 | "Isabella", 107 | "Ruby", 108 | "Chloe", 109 | "Olivia", 110 | "Charlotte", 111 | "Mia", 112 | "Lily", 113 | "Emily", 114 | "Ella", 115 | "Sienna", 116 | "Sophie", 117 | "Amelia", 118 | "Grace", 119 | "Ava", 120 | "Zoe", 121 | "Emma", 122 | "Sophia", 123 | "Matilda", 124 | "Hannah", 125 | "Jessica", 126 | "Lucy", 127 | "Georgia", 128 | "Sarah", 129 | "Abigail", 130 | "Zara", 131 | "Eva", 132 | "Scarlett", 133 | "Jasmine", 134 | "Chelsea", 135 | "Lilly", 136 | "Ivy", 137 | "Isla", 138 | "Evie", 139 | "Isabelle", 140 | "Maddison", 141 | "Layla", 142 | "Summer", 143 | "Annabelle", 144 | "Alexis", 145 | "Elizabeth", 146 | "Bella", 147 | "Holly", 148 | "Lara", 149 | "Madison", 150 | "Alyssa", 151 | "Maya", 152 | "Tahlia", 153 | "Claire", 154 | "Hayley", 155 | "Imogen", 156 | "Jade", 157 | "Ellie", 158 | "Sofia", 159 | "Addison", 160 | "Molly", 161 | "Phoebe", 162 | "Alice", 163 | "Savannah", 164 | "Gabriella", 165 | "Kayla", 166 | "Mikayla", 167 | "Abbey", 168 | "Eliza", 169 | "Willow", 170 | "Alexandra", 171 | "Poppy", 172 | "Samantha", 173 | "Stella", 174 | "Amy", 175 | "Amelie", 176 | "Anna", 177 | "Piper", 178 | "Gemma", 179 | "Isabel", 180 | "Victoria", 181 | "Stephanie", 182 | "Caitlin", 183 | "Heidi", 184 | "Paige", 185 | "Rose", 186 | "Amber", 187 | "Audrey", 188 | "Claudia", 189 | "Taylor", 190 | "Madeline", 191 | "Angelina", 192 | "Natalie", 193 | "Charli", 194 | "Lauren", 195 | "Ashley", 196 | "Violet", 197 | "Mackenzie", 198 | "Abby", 199 | "Skye", 200 | "Lillian", 201 | "Alana", 202 | "Lola", 203 | "Leah", 204 | "Eve", 205 | "Kiara" 206 | ], 207 | "last_name": [ 208 | "Smith", 209 | "Jones", 210 | "Williams", 211 | "Brown", 212 | "Wilson", 213 | "Taylor", 214 | "Johnson", 215 | "White", 216 | "Martin", 217 | "Anderson", 218 | "Thompson", 219 | "Nguyen", 220 | "Thomas", 221 | "Walker", 222 | "Harris", 223 | "Lee", 224 | "Ryan", 225 | "Robinson", 226 | "Kelly", 227 | "King", 228 | "Davis", 229 | "Wright", 230 | "Evans", 231 | "Roberts", 232 | "Green", 233 | "Hall", 234 | "Wood", 235 | "Jackson", 236 | "Clarke", 237 | "Patel", 238 | "Khan", 239 | "Lewis", 240 | "James", 241 | "Phillips", 242 | "Mason", 243 | "Mitchell", 244 | "Rose", 245 | "Davies", 246 | "Rodriguez", 247 | "Cox", 248 | "Alexander", 249 | "Garden", 250 | "Campbell", 251 | "Johnston", 252 | "Moore", 253 | "Smyth", 254 | "O'neill", 255 | "Doherty", 256 | "Stewart", 257 | "Quinn", 258 | "Murphy", 259 | "Graham", 260 | "Mclaughlin", 261 | "Hamilton", 262 | "Murray", 263 | "Hughes", 264 | "Robertson", 265 | "Thomson", 266 | "Scott", 267 | "Macdonald", 268 | "Reid", 269 | "Clark", 270 | "Ross", 271 | "Young", 272 | "Watson", 273 | "Paterson", 274 | "Morrison", 275 | "Morgan", 276 | "Griffiths", 277 | "Edwards", 278 | "Rees", 279 | "Jenkins", 280 | "Owen", 281 | "Price", 282 | "Moss", 283 | "Richards", 284 | "Abbott", 285 | "Adams", 286 | "Armstrong", 287 | "Bahringer", 288 | "Bailey", 289 | "Barrows", 290 | "Bartell", 291 | "Bartoletti", 292 | "Barton", 293 | "Bauch", 294 | "Baumbach", 295 | "Bayer", 296 | "Beahan", 297 | "Beatty", 298 | "Becker", 299 | "Beier", 300 | "Berge", 301 | "Bergstrom", 302 | "Bode", 303 | "Bogan", 304 | "Borer", 305 | "Bosco", 306 | "Botsford", 307 | "Boyer", 308 | "Boyle", 309 | "Braun", 310 | "Bruen", 311 | "Carroll", 312 | "Carter", 313 | "Cartwright", 314 | "Casper", 315 | "Cassin", 316 | "Champlin", 317 | "Christiansen", 318 | "Cole", 319 | "Collier", 320 | "Collins", 321 | "Connelly", 322 | "Conroy", 323 | "Corkery", 324 | "Cormier", 325 | "Corwin", 326 | "Cronin", 327 | "Crooks", 328 | "Cruickshank", 329 | "Cummings", 330 | "D'amore", 331 | "Daniel", 332 | "Dare", 333 | "Daugherty", 334 | "Dickens", 335 | "Dickinson", 336 | "Dietrich", 337 | "Donnelly", 338 | "Dooley", 339 | "Douglas", 340 | "Doyle", 341 | "Durgan", 342 | "Ebert", 343 | "Emard", 344 | "Emmerich", 345 | "Erdman", 346 | "Ernser", 347 | "Fadel", 348 | "Fahey", 349 | "Farrell", 350 | "Fay", 351 | "Feeney", 352 | "Feil", 353 | "Ferry", 354 | "Fisher", 355 | "Flatley", 356 | "Gibson", 357 | "Gleason", 358 | "Glover", 359 | "Goldner", 360 | "Goodwin", 361 | "Grady", 362 | "Grant", 363 | "Greenfelder", 364 | "Greenholt", 365 | "Grimes", 366 | "Gutmann", 367 | "Hackett", 368 | "Hahn", 369 | "Haley", 370 | "Hammes", 371 | "Hand", 372 | "Hane", 373 | "Hansen", 374 | "Harber", 375 | "Hartmann", 376 | "Harvey", 377 | "Hayes", 378 | "Heaney", 379 | "Heathcote", 380 | "Heller", 381 | "Hermann", 382 | "Hermiston", 383 | "Hessel", 384 | "Hettinger", 385 | "Hickle", 386 | "Hill", 387 | "Hills", 388 | "Hoppe", 389 | "Howe", 390 | "Howell", 391 | "Hudson", 392 | "Huel", 393 | "Hyatt", 394 | "Jacobi", 395 | "Jacobs", 396 | "Jacobson", 397 | "Jerde", 398 | "Johns", 399 | "Keeling", 400 | "Kemmer", 401 | "Kessler", 402 | "Kiehn", 403 | "Kirlin", 404 | "Klein", 405 | "Koch", 406 | "Koelpin", 407 | "Kohler", 408 | "Koss", 409 | "Kovacek", 410 | "Kreiger", 411 | "Kris", 412 | "Kuhlman", 413 | "Kuhn", 414 | "Kulas", 415 | "Kunde", 416 | "Kutch", 417 | "Lakin", 418 | "Lang", 419 | "Langworth", 420 | "Larkin", 421 | "Larson", 422 | "Leannon", 423 | "Leffler", 424 | "Little", 425 | "Lockman", 426 | "Lowe", 427 | "Lynch", 428 | "Mann", 429 | "Marks", 430 | "Marvin", 431 | "Mayer", 432 | "Mccullough", 433 | "Mcdermott", 434 | "Mckenzie", 435 | "Miller", 436 | "Mills", 437 | "Monahan", 438 | "Morissette", 439 | "Mueller", 440 | "Muller", 441 | "Nader", 442 | "Nicolas", 443 | "Nolan", 444 | "O'connell", 445 | "O'conner", 446 | "O'hara", 447 | "O'keefe", 448 | "Olson", 449 | "O'reilly", 450 | "Parisian", 451 | "Parker", 452 | "Quigley", 453 | "Reilly", 454 | "Reynolds", 455 | "Rice", 456 | "Ritchie", 457 | "Rohan", 458 | "Rolfson", 459 | "Rowe", 460 | "Russel", 461 | "Rutherford", 462 | "Sanford", 463 | "Sauer", 464 | "Schmidt", 465 | "Schmitt", 466 | "Schneider", 467 | "Schroeder", 468 | "Schultz", 469 | "Shields", 470 | "Smitham", 471 | "Spencer", 472 | "Stanton", 473 | "Stark", 474 | "Stokes", 475 | "Swift", 476 | "Tillman", 477 | "Towne", 478 | "Tremblay", 479 | "Tromp", 480 | "Turcotte", 481 | "Turner", 482 | "Walsh", 483 | "Walter", 484 | "Ward", 485 | "Waters", 486 | "Weber", 487 | "Welch", 488 | "West", 489 | "Wilderman", 490 | "Wilkinson", 491 | "Williamson", 492 | "Windler", 493 | "Wolf" 494 | ] 495 | }, 496 | "company": { 497 | "suffix": [ 498 | "Pty Ltd", 499 | "and Sons", 500 | "Corp", 501 | "Group", 502 | "Brothers", 503 | "Partners" 504 | ] 505 | }, 506 | "internet": { 507 | "domain_suffix": [ 508 | "com.au", 509 | "com", 510 | "net.au", 511 | "net", 512 | "org.au", 513 | "org" 514 | ] 515 | }, 516 | "address": { 517 | "state_abbr": [ 518 | "NSW", 519 | "QLD", 520 | "NT", 521 | "SA", 522 | "WA", 523 | "TAS", 524 | "ACT", 525 | "VIC" 526 | ], 527 | "state": [ 528 | "New South Wales", 529 | "Queensland", 530 | "Northern Territory", 531 | "South Australia", 532 | "Western Australia", 533 | "Tasmania", 534 | "Australian Capital Territory", 535 | "Victoria" 536 | ], 537 | "postcode": [ 538 | "0###", 539 | "2###", 540 | "3###", 541 | "4###", 542 | "5###", 543 | "6###", 544 | "7###" 545 | ], 546 | "building_number": [ 547 | "####", 548 | "###", 549 | "##" 550 | ], 551 | "street_suffix": [ 552 | "Avenue", 553 | "Boulevard", 554 | "Circle", 555 | "Circuit", 556 | "Court", 557 | "Crescent", 558 | "Crest", 559 | "Drive", 560 | "Estate Dr", 561 | "Grove", 562 | "Hill", 563 | "Island", 564 | "Junction", 565 | "Knoll", 566 | "Lane", 567 | "Loop", 568 | "Mall", 569 | "Manor", 570 | "Meadow", 571 | "Mews", 572 | "Parade", 573 | "Parkway", 574 | "Pass", 575 | "Place", 576 | "Plaza", 577 | "Ridge", 578 | "Road", 579 | "Run", 580 | "Square", 581 | "Station St", 582 | "Street", 583 | "Summit", 584 | "Terrace", 585 | "Track", 586 | "Trail", 587 | "View Rd", 588 | "Way" 589 | ], 590 | "default_country": [ 591 | "Australia" 592 | ] 593 | }, 594 | "phone_number": { 595 | "formats": [ 596 | "0# #### ####", 597 | "+61 # #### ####", 598 | "04## ### ###", 599 | "+61 4## ### ###" 600 | ] 601 | }, 602 | "team": { 603 | "sport": [ 604 | "basketball", 605 | "football", 606 | "footy", 607 | "netball", 608 | "rugby" 609 | ] 610 | } 611 | } 612 | } 613 | } 614 | -------------------------------------------------------------------------------- /Resources/Locales/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-US": { 3 | "faker": { 4 | "internet": { 5 | "domain_suffix": [ 6 | "com", 7 | "us", 8 | "biz", 9 | "info", 10 | "name", 11 | "net", 12 | "org" 13 | ] 14 | }, 15 | "address": { 16 | "default_country": [ 17 | "United States", 18 | "United States of America", 19 | "USA" 20 | ], 21 | "postcode_by_state": { 22 | "AL": "350##", 23 | "AK": "995##", 24 | "AS": "967##", 25 | "AZ": "850##", 26 | "AR": "717##", 27 | "CA": "900##", 28 | "CO": "800##", 29 | "CT": "061##", 30 | "DC": "204##", 31 | "DE": "198##", 32 | "FL": "322##", 33 | "GA": "301##", 34 | "HI": "967##", 35 | "ID": "832##", 36 | "IL": "600##", 37 | "IN": "463##", 38 | "IA": "510##", 39 | "KS": "666##", 40 | "KY": "404##", 41 | "LA": "701##", 42 | "ME": "042##", 43 | "MD": "210##", 44 | "MA": "026##", 45 | "MI": "480##", 46 | "MN": "555##", 47 | "MS": "387##", 48 | "MO": "650##", 49 | "MT": "590##", 50 | "NE": "688##", 51 | "NV": "898##", 52 | "NH": "036##", 53 | "NJ": "076##", 54 | "NM": "880##", 55 | "NY": "122##", 56 | "NC": "288##", 57 | "ND": "586##", 58 | "OH": "444##", 59 | "OK": "730##", 60 | "OR": "979##", 61 | "PA": "186##", 62 | "RI": "029##", 63 | "SC": "299##", 64 | "SD": "577##", 65 | "TN": "383##", 66 | "TX": "798##", 67 | "UT": "847##", 68 | "VT": "050##", 69 | "VA": "222##", 70 | "WA": "990##", 71 | "WV": "247##", 72 | "WI": "549##", 73 | "WY": "831##" 74 | } 75 | }, 76 | "phone_number": { 77 | "area_code": [ 78 | "201", 79 | "202", 80 | "203", 81 | "205", 82 | "206", 83 | "207", 84 | "208", 85 | "209", 86 | "210", 87 | "212", 88 | "213", 89 | "214", 90 | "215", 91 | "216", 92 | "217", 93 | "218", 94 | "219", 95 | "224", 96 | "225", 97 | "227", 98 | "228", 99 | "229", 100 | "231", 101 | "234", 102 | "239", 103 | "240", 104 | "248", 105 | "251", 106 | "252", 107 | "253", 108 | "254", 109 | "256", 110 | "260", 111 | "262", 112 | "267", 113 | "269", 114 | "270", 115 | "276", 116 | "281", 117 | "283", 118 | "301", 119 | "302", 120 | "303", 121 | "304", 122 | "305", 123 | "307", 124 | "308", 125 | "309", 126 | "310", 127 | "312", 128 | "313", 129 | "314", 130 | "315", 131 | "316", 132 | "317", 133 | "318", 134 | "319", 135 | "320", 136 | "321", 137 | "323", 138 | "330", 139 | "331", 140 | "334", 141 | "336", 142 | "337", 143 | "339", 144 | "347", 145 | "351", 146 | "352", 147 | "360", 148 | "361", 149 | "386", 150 | "401", 151 | "402", 152 | "404", 153 | "405", 154 | "406", 155 | "407", 156 | "408", 157 | "409", 158 | "410", 159 | "412", 160 | "413", 161 | "414", 162 | "415", 163 | "417", 164 | "419", 165 | "423", 166 | "424", 167 | "425", 168 | "434", 169 | "435", 170 | "440", 171 | "443", 172 | "445", 173 | "464", 174 | "469", 175 | "470", 176 | "475", 177 | "478", 178 | "479", 179 | "480", 180 | "484", 181 | "501", 182 | "502", 183 | "503", 184 | "504", 185 | "505", 186 | "507", 187 | "508", 188 | "509", 189 | "510", 190 | "512", 191 | "513", 192 | "515", 193 | "516", 194 | "517", 195 | "518", 196 | "520", 197 | "530", 198 | "540", 199 | "541", 200 | "551", 201 | "557", 202 | "559", 203 | "561", 204 | "562", 205 | "563", 206 | "564", 207 | "567", 208 | "570", 209 | "571", 210 | "573", 211 | "574", 212 | "580", 213 | "585", 214 | "586", 215 | "601", 216 | "602", 217 | "603", 218 | "605", 219 | "606", 220 | "607", 221 | "608", 222 | "609", 223 | "610", 224 | "612", 225 | "614", 226 | "615", 227 | "616", 228 | "617", 229 | "618", 230 | "619", 231 | "620", 232 | "623", 233 | "626", 234 | "630", 235 | "631", 236 | "636", 237 | "641", 238 | "646", 239 | "650", 240 | "651", 241 | "660", 242 | "661", 243 | "662", 244 | "667", 245 | "678", 246 | "682", 247 | "701", 248 | "702", 249 | "703", 250 | "704", 251 | "706", 252 | "707", 253 | "708", 254 | "712", 255 | "713", 256 | "714", 257 | "715", 258 | "716", 259 | "717", 260 | "718", 261 | "719", 262 | "720", 263 | "724", 264 | "727", 265 | "731", 266 | "732", 267 | "734", 268 | "737", 269 | "740", 270 | "754", 271 | "757", 272 | "760", 273 | "763", 274 | "765", 275 | "770", 276 | "772", 277 | "773", 278 | "774", 279 | "775", 280 | "781", 281 | "785", 282 | "786", 283 | "801", 284 | "802", 285 | "803", 286 | "804", 287 | "805", 288 | "806", 289 | "808", 290 | "810", 291 | "812", 292 | "813", 293 | "814", 294 | "815", 295 | "816", 296 | "817", 297 | "818", 298 | "828", 299 | "830", 300 | "831", 301 | "832", 302 | "835", 303 | "843", 304 | "845", 305 | "847", 306 | "848", 307 | "850", 308 | "856", 309 | "857", 310 | "858", 311 | "859", 312 | "860", 313 | "862", 314 | "863", 315 | "864", 316 | "865", 317 | "870", 318 | "872", 319 | "878", 320 | "901", 321 | "903", 322 | "904", 323 | "906", 324 | "907", 325 | "908", 326 | "909", 327 | "910", 328 | "912", 329 | "913", 330 | "914", 331 | "915", 332 | "916", 333 | "917", 334 | "918", 335 | "919", 336 | "920", 337 | "925", 338 | "928", 339 | "931", 340 | "936", 341 | "937", 342 | "940", 343 | "941", 344 | "947", 345 | "949", 346 | "952", 347 | "954", 348 | "956", 349 | "959", 350 | "970", 351 | "971", 352 | "972", 353 | "973", 354 | "975", 355 | "978", 356 | "979", 357 | "980", 358 | "984", 359 | "985", 360 | "989" 361 | ], 362 | "exchange_code": [ 363 | "201", 364 | "202", 365 | "203", 366 | "205", 367 | "206", 368 | "207", 369 | "208", 370 | "209", 371 | "210", 372 | "212", 373 | "213", 374 | "214", 375 | "215", 376 | "216", 377 | "217", 378 | "218", 379 | "219", 380 | "224", 381 | "225", 382 | "227", 383 | "228", 384 | "229", 385 | "231", 386 | "234", 387 | "239", 388 | "240", 389 | "248", 390 | "251", 391 | "252", 392 | "253", 393 | "254", 394 | "256", 395 | "260", 396 | "262", 397 | "267", 398 | "269", 399 | "270", 400 | "276", 401 | "281", 402 | "283", 403 | "301", 404 | "302", 405 | "303", 406 | "304", 407 | "305", 408 | "307", 409 | "308", 410 | "309", 411 | "310", 412 | "312", 413 | "313", 414 | "314", 415 | "315", 416 | "316", 417 | "317", 418 | "318", 419 | "319", 420 | "320", 421 | "321", 422 | "323", 423 | "330", 424 | "331", 425 | "334", 426 | "336", 427 | "337", 428 | "339", 429 | "347", 430 | "351", 431 | "352", 432 | "360", 433 | "361", 434 | "386", 435 | "401", 436 | "402", 437 | "404", 438 | "405", 439 | "406", 440 | "407", 441 | "408", 442 | "409", 443 | "410", 444 | "412", 445 | "413", 446 | "414", 447 | "415", 448 | "417", 449 | "419", 450 | "423", 451 | "424", 452 | "425", 453 | "434", 454 | "435", 455 | "440", 456 | "443", 457 | "445", 458 | "464", 459 | "469", 460 | "470", 461 | "475", 462 | "478", 463 | "479", 464 | "480", 465 | "484", 466 | "501", 467 | "502", 468 | "503", 469 | "504", 470 | "505", 471 | "507", 472 | "508", 473 | "509", 474 | "510", 475 | "512", 476 | "513", 477 | "515", 478 | "516", 479 | "517", 480 | "518", 481 | "520", 482 | "530", 483 | "540", 484 | "541", 485 | "551", 486 | "557", 487 | "559", 488 | "561", 489 | "562", 490 | "563", 491 | "564", 492 | "567", 493 | "570", 494 | "571", 495 | "573", 496 | "574", 497 | "580", 498 | "585", 499 | "586", 500 | "601", 501 | "602", 502 | "603", 503 | "605", 504 | "606", 505 | "607", 506 | "608", 507 | "609", 508 | "610", 509 | "612", 510 | "614", 511 | "615", 512 | "616", 513 | "617", 514 | "618", 515 | "619", 516 | "620", 517 | "623", 518 | "626", 519 | "630", 520 | "631", 521 | "636", 522 | "641", 523 | "646", 524 | "650", 525 | "651", 526 | "660", 527 | "661", 528 | "662", 529 | "667", 530 | "678", 531 | "682", 532 | "701", 533 | "702", 534 | "703", 535 | "704", 536 | "706", 537 | "707", 538 | "708", 539 | "712", 540 | "713", 541 | "714", 542 | "715", 543 | "716", 544 | "717", 545 | "718", 546 | "719", 547 | "720", 548 | "724", 549 | "727", 550 | "731", 551 | "732", 552 | "734", 553 | "737", 554 | "740", 555 | "754", 556 | "757", 557 | "760", 558 | "763", 559 | "765", 560 | "770", 561 | "772", 562 | "773", 563 | "774", 564 | "775", 565 | "781", 566 | "785", 567 | "786", 568 | "801", 569 | "802", 570 | "803", 571 | "804", 572 | "805", 573 | "806", 574 | "808", 575 | "810", 576 | "812", 577 | "813", 578 | "814", 579 | "815", 580 | "816", 581 | "817", 582 | "818", 583 | "828", 584 | "830", 585 | "831", 586 | "832", 587 | "835", 588 | "843", 589 | "845", 590 | "847", 591 | "848", 592 | "850", 593 | "856", 594 | "857", 595 | "858", 596 | "859", 597 | "860", 598 | "862", 599 | "863", 600 | "864", 601 | "865", 602 | "870", 603 | "872", 604 | "878", 605 | "901", 606 | "903", 607 | "904", 608 | "906", 609 | "907", 610 | "908", 611 | "909", 612 | "910", 613 | "912", 614 | "913", 615 | "914", 616 | "915", 617 | "916", 618 | "917", 619 | "918", 620 | "919", 621 | "920", 622 | "925", 623 | "928", 624 | "931", 625 | "936", 626 | "937", 627 | "940", 628 | "941", 629 | "947", 630 | "949", 631 | "952", 632 | "954", 633 | "956", 634 | "959", 635 | "970", 636 | "971", 637 | "972", 638 | "973", 639 | "975", 640 | "978", 641 | "979", 642 | "980", 643 | "984", 644 | "985", 645 | "989" 646 | ], 647 | "formats": [ 648 | "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 649 | "(#{PhoneNumber.area_code}) #{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 650 | "1-#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 651 | "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number}", 652 | "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 653 | "(#{PhoneNumber.area_code}) #{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 654 | "1-#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}", 655 | "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number}", 656 | "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 657 | "(#{PhoneNumber.area_code}) #{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 658 | "1-#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 659 | "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 660 | "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 661 | "(#{PhoneNumber.area_code}) #{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 662 | "1-#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 663 | "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 664 | "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 665 | "(#{PhoneNumber.area_code}) #{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 666 | "1-#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}", 667 | "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number} x#{PhoneNumber.extension}" 668 | ] 669 | } 670 | } 671 | } 672 | } 673 | -------------------------------------------------------------------------------- /Resources/Locales/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "sv": { 3 | "faker": { 4 | "address": { 5 | "city_prefix": [ 6 | "Söder", 7 | "Norr", 8 | "Väst", 9 | "Öster", 10 | "Aling", 11 | "Ar", 12 | "Av", 13 | "Bo", 14 | "Br", 15 | "Bå", 16 | "Ek", 17 | "En", 18 | "Esk", 19 | "Fal", 20 | "Gäv", 21 | "Göte", 22 | "Ha", 23 | "Helsing", 24 | "Karl", 25 | "Krist", 26 | "Kram", 27 | "Kung", 28 | "Kö", 29 | "Lyck", 30 | "Ny" 31 | ], 32 | "city_suffix": [ 33 | "stad", 34 | "land", 35 | "sås", 36 | "ås", 37 | "holm", 38 | "tuna", 39 | "sta", 40 | "berg", 41 | "löv", 42 | "borg", 43 | "mora", 44 | "hamn", 45 | "fors", 46 | "köping", 47 | "by", 48 | "hult", 49 | "torp", 50 | "fred", 51 | "vik" 52 | ], 53 | "country": [ 54 | "Ryssland", 55 | "Kanada", 56 | "Kina", 57 | "USA", 58 | "Brasilien", 59 | "Australien", 60 | "Indien", 61 | "Argentina", 62 | "Kazakstan", 63 | "Algeriet", 64 | "DR Kongo", 65 | "Danmark", 66 | "Färöarna", 67 | "Grönland", 68 | "Saudiarabien", 69 | "Mexiko", 70 | "Indonesien", 71 | "Sudan", 72 | "Libyen", 73 | "Iran", 74 | "Mongoliet", 75 | "Peru", 76 | "Tchad", 77 | "Niger", 78 | "Angola", 79 | "Mali", 80 | "Sydafrika", 81 | "Colombia", 82 | "Etiopien", 83 | "Bolivia", 84 | "Mauretanien", 85 | "Egypten", 86 | "Tanzania", 87 | "Nigeria", 88 | "Venezuela", 89 | "Namibia", 90 | "Pakistan", 91 | "Moçambique", 92 | "Turkiet", 93 | "Chile", 94 | "Zambia", 95 | "Marocko", 96 | "Västsahara", 97 | "Burma", 98 | "Afghanistan", 99 | "Somalia", 100 | "Centralafrikanska republiken", 101 | "Sydsudan", 102 | "Ukraina", 103 | "Botswana", 104 | "Madagaskar", 105 | "Kenya", 106 | "Frankrike", 107 | "Franska Guyana", 108 | "Jemen", 109 | "Thailand", 110 | "Spanien", 111 | "Turkmenistan", 112 | "Kamerun", 113 | "Papua Nya Guinea", 114 | "Sverige", 115 | "Uzbekistan", 116 | "Irak", 117 | "Paraguay", 118 | "Zimbabwe", 119 | "Japan", 120 | "Tyskland", 121 | "Kongo", 122 | "Finland", 123 | "Malaysia", 124 | "Vietnam", 125 | "Norge", 126 | "Svalbard", 127 | "Jan Mayen", 128 | "Elfenbenskusten", 129 | "Polen", 130 | "Italien", 131 | "Filippinerna", 132 | "Ecuador", 133 | "Burkina Faso", 134 | "Nya Zeeland", 135 | "Gabon", 136 | "Guinea", 137 | "Storbritannien", 138 | "Ghana", 139 | "Rumänien", 140 | "Laos", 141 | "Uganda", 142 | "Guyana", 143 | "Oman", 144 | "Vitryssland", 145 | "Kirgizistan", 146 | "Senegal", 147 | "Syrien", 148 | "Kambodja", 149 | "Uruguay", 150 | "Tunisien", 151 | "Surinam", 152 | "Nepal", 153 | "Bangladesh", 154 | "Tadzjikistan", 155 | "Grekland", 156 | "Nicaragua", 157 | "Eritrea", 158 | "Nordkorea", 159 | "Malawi", 160 | "Benin", 161 | "Honduras", 162 | "Liberia", 163 | "Bulgarien", 164 | "Kuba", 165 | "Guatemala", 166 | "Island", 167 | "Sydkorea", 168 | "Ungern", 169 | "Portugal", 170 | "Jordanien", 171 | "Serbien", 172 | "Azerbajdzjan", 173 | "Österrike", 174 | "Förenade Arabemiraten", 175 | "Tjeckien", 176 | "Panama", 177 | "Sierra Leone", 178 | "Irland", 179 | "Georgien", 180 | "Sri Lanka", 181 | "Litauen", 182 | "Lettland", 183 | "Togo", 184 | "Kroatien", 185 | "Bosnien och Hercegovina", 186 | "Costa Rica", 187 | "Slovakien", 188 | "Dominikanska republiken", 189 | "Bhutan", 190 | "Estland", 191 | "Danmark", 192 | "Färöarna", 193 | "Grönland", 194 | "Nederländerna", 195 | "Schweiz", 196 | "Guinea-Bissau", 197 | "Taiwan", 198 | "Moldavien", 199 | "Belgien", 200 | "Lesotho", 201 | "Armenien", 202 | "Albanien", 203 | "Salomonöarna", 204 | "Ekvatorialguinea", 205 | "Burundi", 206 | "Haiti", 207 | "Rwanda", 208 | "Makedonien", 209 | "Djibouti", 210 | "Belize", 211 | "Israel", 212 | "El Salvador", 213 | "Slovenien", 214 | "Fiji", 215 | "Kuwait", 216 | "Swaziland", 217 | "Timor-Leste", 218 | "Montenegro", 219 | "Bahamas", 220 | "Vanuatu", 221 | "Qatar", 222 | "Gambia", 223 | "Jamaica", 224 | "Kosovo", 225 | "Libanon", 226 | "Cypern", 227 | "Brunei", 228 | "Trinidad och Tobago", 229 | "Kap Verde", 230 | "Samoa", 231 | "Luxemburg", 232 | "Komorerna", 233 | "Mauritius", 234 | "São Tomé och Príncipe", 235 | "Kiribati", 236 | "Dominica", 237 | "Tonga", 238 | "Mikronesiens federerade stater", 239 | "Singapore", 240 | "Bahrain", 241 | "Saint Lucia", 242 | "Andorra", 243 | "Palau", 244 | "Seychellerna", 245 | "Antigua och Barbuda", 246 | "Barbados", 247 | "Saint Vincent och Grenadinerna", 248 | "Grenada", 249 | "Malta", 250 | "Maldiverna", 251 | "Saint Kitts och Nevis", 252 | "Marshallöarna", 253 | "Liechtenstein", 254 | "San Marino", 255 | "Tuvalu", 256 | "Nauru", 257 | "Monaco", 258 | "Vatikanstaten" 259 | ], 260 | "common_street_suffix": [ 261 | "s Väg", 262 | "s Gata" 263 | ], 264 | "street_prefix": [ 265 | "Västra", 266 | "Östra", 267 | "Norra", 268 | "Södra", 269 | "Övre", 270 | "Undre" 271 | ], 272 | "street_root": [ 273 | "Björk", 274 | "Järnvägs", 275 | "Ring", 276 | "Skol", 277 | "Skogs", 278 | "Ny", 279 | "Gran", 280 | "Idrotts", 281 | "Stor", 282 | "Kyrk", 283 | "Industri", 284 | "Park", 285 | "Strand", 286 | "Skol", 287 | "Trädgård", 288 | "Ängs", 289 | "Kyrko", 290 | "Villa", 291 | "Ek", 292 | "Kvarn", 293 | "Stations", 294 | "Back", 295 | "Furu", 296 | "Gen", 297 | "Fabriks", 298 | "Åker", 299 | "Bäck", 300 | "Asp" 301 | ], 302 | "street_suffix": [ 303 | "vägen", 304 | "gatan", 305 | "gränden", 306 | "gärdet", 307 | "allén" 308 | ], 309 | "state": [ 310 | "Blekinge", 311 | "Dalarna", 312 | "Gotland", 313 | "Gävleborg", 314 | "Göteborg", 315 | "Halland", 316 | "Jämtland", 317 | "Jönköping", 318 | "Kalmar", 319 | "Kronoberg", 320 | "Norrbotten", 321 | "Skaraborg", 322 | "Skåne", 323 | "Stockholm", 324 | "Södermanland", 325 | "Uppsala", 326 | "Värmland", 327 | "Västerbotten", 328 | "Västernorrland", 329 | "Västmanland", 330 | "Älvsborg", 331 | "Örebro", 332 | "Östergötland" 333 | ], 334 | "city": [ 335 | "#{city_prefix}#{city_suffix}" 336 | ], 337 | "street_name": [ 338 | "#{street_root}#{street_suffix}", 339 | "#{street_prefix} #{street_root}#{street_suffix}", 340 | "#{Name.first_name}#{common_street_suffix}", 341 | "#{Name.last_name}#{common_street_suffix}" 342 | ], 343 | "postcode": [ 344 | "#####" 345 | ], 346 | "building_number": [ 347 | "###", 348 | "##", 349 | "#" 350 | ], 351 | "secondary_address": [ 352 | "Lgh. ###", 353 | "Hus ###" 354 | ], 355 | "street_address": [ 356 | "#{street_name} #{building_number}" 357 | ], 358 | "default_country": [ 359 | "Sverige" 360 | ] 361 | }, 362 | "company": { 363 | "suffix": [ 364 | "Gruppen", 365 | "AB", 366 | "HB", 367 | "Group", 368 | "Investment", 369 | "Kommanditbolag", 370 | "Aktiebolag" 371 | ], 372 | "name": [ 373 | "#{Name.last_name} #{suffix}", 374 | "#{Name.last_name}-#{Name.last_name}", 375 | "#{Name.last_name}, #{Name.last_name} #{suffix}" 376 | ] 377 | }, 378 | "internet": { 379 | "domain_suffix": [ 380 | "se", 381 | "nu", 382 | "info", 383 | "com", 384 | "org" 385 | ] 386 | }, 387 | "name": { 388 | "first_name_women": [ 389 | "Maria", 390 | "Anna", 391 | "Margareta", 392 | "Elisabeth", 393 | "Eva", 394 | "Birgitta", 395 | "Kristina", 396 | "Karin", 397 | "Elisabet", 398 | "Marie" 399 | ], 400 | "first_name_men": [ 401 | "Erik", 402 | "Lars", 403 | "Karl", 404 | "Anders", 405 | "Per", 406 | "Johan", 407 | "Nils", 408 | "Lennart", 409 | "Emil", 410 | "Hans" 411 | ], 412 | "last_name": [ 413 | "Johansson", 414 | "Andersson", 415 | "Karlsson", 416 | "Nilsson", 417 | "Eriksson", 418 | "Larsson", 419 | "Olsson", 420 | "Persson", 421 | "Svensson", 422 | "Gustafsson" 423 | ], 424 | "prefix": [ 425 | "Dr.", 426 | "Prof.", 427 | "PhD." 428 | ], 429 | "title": { 430 | "descriptor": [ 431 | "Lead", 432 | "Senior", 433 | "Direct", 434 | "Corporate", 435 | "Dynamic", 436 | "Future", 437 | "Product", 438 | "National", 439 | "Regional", 440 | "District", 441 | "Central", 442 | "Global", 443 | "Customer", 444 | "Investor", 445 | "Dynamic", 446 | "International", 447 | "Legacy", 448 | "Forward", 449 | "Internal", 450 | "Human", 451 | "Chief", 452 | "Principal" 453 | ], 454 | "level": [ 455 | "Solutions", 456 | "Program", 457 | "Brand", 458 | "Security", 459 | "Research", 460 | "Marketing", 461 | "Directives", 462 | "Implementation", 463 | "Integration", 464 | "Functionality", 465 | "Response", 466 | "Paradigm", 467 | "Tactics", 468 | "Identity", 469 | "Markets", 470 | "Group", 471 | "Division", 472 | "Applications", 473 | "Optimization", 474 | "Operations", 475 | "Infrastructure", 476 | "Intranet", 477 | "Communications", 478 | "Web", 479 | "Branding", 480 | "Quality", 481 | "Assurance", 482 | "Mobility", 483 | "Accounts", 484 | "Data", 485 | "Creative", 486 | "Configuration", 487 | "Accountability", 488 | "Interactions", 489 | "Factors", 490 | "Usability", 491 | "Metrics" 492 | ], 493 | "job": [ 494 | "Supervisor", 495 | "Associate", 496 | "Executive", 497 | "Liaison", 498 | "Officer", 499 | "Manager", 500 | "Engineer", 501 | "Specialist", 502 | "Director", 503 | "Coordinator", 504 | "Administrator", 505 | "Architect", 506 | "Analyst", 507 | "Designer", 508 | "Planner", 509 | "Orchestrator", 510 | "Technician", 511 | "Developer", 512 | "Producer", 513 | "Consultant", 514 | "Assistant", 515 | "Facilitator", 516 | "Agent", 517 | "Representative", 518 | "Strategist" 519 | ] 520 | }, 521 | "name": [ 522 | "#{first_name_women} #{last_name}", 523 | "#{first_name_men} #{last_name}", 524 | "#{first_name_women} #{last_name}", 525 | "#{first_name_men} #{last_name}", 526 | "#{first_name_women} #{last_name}", 527 | "#{first_name_men} #{last_name}", 528 | "#{prefix} #{first_name_men} #{last_name}", 529 | "#{prefix} #{first_name_women} #{last_name}" 530 | ] 531 | }, 532 | "phone_number": { 533 | "formats": [ 534 | "####-#####", 535 | "####-######" 536 | ] 537 | }, 538 | "cell_phone": { 539 | "common_cell_prefix": [ 540 | 56, 541 | 62, 542 | 59 543 | ], 544 | "formats": [ 545 | "#{common_cell_prefix}-###-####" 546 | ] 547 | }, 548 | "commerce": { 549 | "color": [ 550 | "vit", 551 | "silver", 552 | "grå", 553 | "svart", 554 | "röd", 555 | "grön", 556 | "blå", 557 | "gul", 558 | "lila", 559 | "indigo", 560 | "guld", 561 | "brun", 562 | "rosa", 563 | "purpur", 564 | "korall" 565 | ], 566 | "department": [ 567 | "Böcker", 568 | "Filmer", 569 | "Musik", 570 | "Spel", 571 | "Elektronik", 572 | "Datorer", 573 | "Hem", 574 | "Trädgård", 575 | "Verktyg", 576 | "Livsmedel", 577 | "Hälsa", 578 | "Skönhet", 579 | "Leksaker", 580 | "Klädsel", 581 | "Skor", 582 | "Smycken", 583 | "Sport" 584 | ], 585 | "product_name": { 586 | "adjective": [ 587 | "Liten", 588 | "Ergonomisk", 589 | "Robust", 590 | "Intelligent", 591 | "Söt", 592 | "Otrolig", 593 | "Fatastisk", 594 | "Praktisk", 595 | "Slimmad", 596 | "Grym", 597 | "Enorm", 598 | "Mediokra", 599 | "Synergistic", 600 | "Tung", 601 | "Lätt", 602 | "Aerodynamisk", 603 | "Tålig" 604 | ], 605 | "material": [ 606 | "Stål", 607 | "Metall", 608 | "Trä", 609 | "Betong", 610 | "Plast", 611 | "Bomul", 612 | "Grnit", 613 | "Gummi", 614 | "Latex", 615 | "Läder", 616 | "Silke", 617 | "Ull", 618 | "Linne", 619 | "Marmor", 620 | "Järn", 621 | "Brons", 622 | "Koppar", 623 | "Aluminium", 624 | "Papper" 625 | ], 626 | "product": [ 627 | "Stol", 628 | "Bil", 629 | "Dator", 630 | "Handskar", 631 | "Pants", 632 | "Shirt", 633 | "Table", 634 | "Shoes", 635 | "Hat", 636 | "Plate", 637 | "Kniv", 638 | "Flaska", 639 | "Coat", 640 | "Lampa. Tangentbord", 641 | "Bag", 642 | "Bänk", 643 | "Klocka", 644 | "Titta", 645 | "Plånbok" 646 | ] 647 | } 648 | }, 649 | "team": { 650 | "suffix": [ 651 | "IF", 652 | "FF", 653 | "BK", 654 | "HK", 655 | "AIF", 656 | "SK", 657 | "FC", 658 | "SK", 659 | "BoIS", 660 | "FK", 661 | "BIS", 662 | "FIF", 663 | "IK" 664 | ], 665 | "name": [ 666 | "#{Address.city} #{suffix}" 667 | ] 668 | } 669 | } 670 | } 671 | } 672 | -------------------------------------------------------------------------------- /Resources/Locales/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "fa": { 3 | "faker": { 4 | "name": { 5 | "first_name": [ 6 | "آبان دخت", 7 | "آبتین", 8 | "آتوسا", 9 | "آفر", 10 | "آفره دخت", 11 | "آذرنوش‌", 12 | "آذین", 13 | "آراه", 14 | "آرزو", 15 | "آرش", 16 | "آرتین", 17 | "آرتام", 18 | "آرتمن", 19 | "آرشام", 20 | "آرمان", 21 | "آرمین", 22 | "آرمیتا", 23 | "آریا فر", 24 | "آریا", 25 | "آریا مهر", 26 | "آرین", 27 | "آزاده", 28 | "آزرم", 29 | "آزرمدخت", 30 | "آزیتا", 31 | "آناهیتا", 32 | "آونگ", 33 | "آهو", 34 | "آیدا", 35 | "اتسز", 36 | "اختر", 37 | "ارد", 38 | "ارد شیر", 39 | "اردوان", 40 | "ارژن", 41 | "ارژنگ", 42 | "ارسلان", 43 | "ارغوان", 44 | "ارمغان", 45 | "ارنواز", 46 | "اروانه", 47 | "استر", 48 | "اسفندیار", 49 | "اشکان", 50 | "اشکبوس", 51 | "افسانه", 52 | "افسون", 53 | "افشین", 54 | "امید", 55 | "انوش (‌ آنوشا )", 56 | "انوشروان", 57 | "اورنگ", 58 | "اوژن", 59 | "اوستا", 60 | "اهورا", 61 | "ایاز", 62 | "ایران", 63 | "ایراندخت", 64 | "ایرج", 65 | "ایزدیار", 66 | "بابک", 67 | "باپوک", 68 | "باربد", 69 | "بارمان", 70 | "بامداد", 71 | "بامشاد", 72 | "بانو", 73 | "بختیار", 74 | "برانوش", 75 | "بردیا", 76 | "برزو", 77 | "برزویه", 78 | "برزین", 79 | "برمک", 80 | "بزرگمهر", 81 | "بنفشه", 82 | "بوژان", 83 | "بویان", 84 | "بهار", 85 | "بهارک", 86 | "بهاره", 87 | "بهتاش", 88 | "بهداد", 89 | "بهرام", 90 | "بهدیس", 91 | "بهرخ", 92 | "بهرنگ", 93 | "بهروز", 94 | "بهزاد", 95 | "بهشاد", 96 | "بهمن", 97 | "بهناز", 98 | "بهنام", 99 | "بهنود", 100 | "بهنوش", 101 | "بیتا", 102 | "بیژن", 103 | "پارسا", 104 | "پاکان", 105 | "پاکتن", 106 | "پاکدخت", 107 | "پانته آ", 108 | "پدرام", 109 | "پرتو", 110 | "پرشنگ", 111 | "پرتو", 112 | "پرستو", 113 | "پرویز", 114 | "پردیس", 115 | "پرهام", 116 | "پژمان", 117 | "پژوا", 118 | "پرنیا", 119 | "پشنگ", 120 | "پروانه", 121 | "پروین", 122 | "پری", 123 | "پریچهر", 124 | "پریدخت", 125 | "پریسا", 126 | "پرناز", 127 | "پریوش", 128 | "پریا", 129 | "پوپک", 130 | "پوران", 131 | "پوراندخت", 132 | "پوریا", 133 | "پولاد", 134 | "پویا", 135 | "پونه", 136 | "پیام", 137 | "پیروز", 138 | "پیمان", 139 | "تابان", 140 | "تاباندخت", 141 | "تاجی", 142 | "تارا", 143 | "تاویار", 144 | "ترانه", 145 | "تناز", 146 | "توران", 147 | "توراندخت", 148 | "تورج", 149 | "تورتک", 150 | "توفان", 151 | "توژال", 152 | "تیر داد", 153 | "تینا", 154 | "تینو", 155 | "جابان", 156 | "جامین", 157 | "جاوید", 158 | "جریره", 159 | "جمشید", 160 | "جوان", 161 | "جویا", 162 | "جهان", 163 | "جهانبخت", 164 | "جهانبخش", 165 | "جهاندار", 166 | "جهانگیر", 167 | "جهان بانو", 168 | "جهاندخت", 169 | "جهان ناز", 170 | "جیران", 171 | "چابک", 172 | "چالاک", 173 | "چاوش", 174 | "چترا", 175 | "چوبین", 176 | "چهرزاد", 177 | "خاوردخت", 178 | "خداداد", 179 | "خدایار", 180 | "خرم", 181 | "خرمدخت", 182 | "خسرو", 183 | "خشایار", 184 | "خورشید", 185 | "دادمهر", 186 | "دارا", 187 | "داراب", 188 | "داریا", 189 | "داریوش", 190 | "دانوش", 191 | "داور‌", 192 | "دایان", 193 | "دریا", 194 | "دل آرا", 195 | "دل آویز", 196 | "دلارام", 197 | "دل انگیز", 198 | "دلبر", 199 | "دلبند", 200 | "دلربا", 201 | "دلشاد", 202 | "دلکش", 203 | "دلناز", 204 | "دلنواز", 205 | "دورشاسب", 206 | "دنیا", 207 | "دیااکو", 208 | "دیانوش", 209 | "دیبا", 210 | "دیبا دخت", 211 | "رابو", 212 | "رابین", 213 | "رادبانو", 214 | "رادمان", 215 | "رازبان", 216 | "راژانه", 217 | "راسا", 218 | "رامتین", 219 | "رامش", 220 | "رامشگر", 221 | "رامونا", 222 | "رامیار", 223 | "رامیلا", 224 | "رامین", 225 | "راویار", 226 | "رژینا", 227 | "رخپاک", 228 | "رخسار", 229 | "رخشانه", 230 | "رخشنده", 231 | "رزمیار", 232 | "رستم", 233 | "رکسانا", 234 | "روبینا", 235 | "رودابه", 236 | "روزبه", 237 | "روشنک", 238 | "روناک", 239 | "رهام", 240 | "رهی", 241 | "ریبار", 242 | "راسپینا", 243 | "زادبخت", 244 | "زاد به", 245 | "زاد چهر", 246 | "زاد فر", 247 | "زال", 248 | "زادماسب", 249 | "زاوا", 250 | "زردشت", 251 | "زرنگار", 252 | "زری", 253 | "زرین", 254 | "زرینه", 255 | "زمانه", 256 | "زونا", 257 | "زیبا", 258 | "زیبار", 259 | "زیما", 260 | "زینو", 261 | "ژاله", 262 | "ژالان", 263 | "ژیار", 264 | "ژینا", 265 | "ژیوار", 266 | "سارا", 267 | "سارک", 268 | "سارنگ", 269 | "ساره", 270 | "ساسان", 271 | "ساغر", 272 | "سام", 273 | "سامان", 274 | "سانا", 275 | "ساناز", 276 | "سانیار", 277 | "ساویز", 278 | "ساهی", 279 | "ساینا", 280 | "سایه", 281 | "سپنتا", 282 | "سپند", 283 | "سپهر", 284 | "سپهرداد", 285 | "سپیدار", 286 | "سپید بانو", 287 | "سپیده", 288 | "ستاره", 289 | "ستی", 290 | "سرافراز", 291 | "سرور", 292 | "سروش", 293 | "سرور", 294 | "سوبا", 295 | "سوبار", 296 | "سنبله", 297 | "سودابه", 298 | "سوری", 299 | "سورن", 300 | "سورنا", 301 | "سوزان", 302 | "سوزه", 303 | "سوسن", 304 | "سومار", 305 | "سولان", 306 | "سولماز", 307 | "سوگند", 308 | "سهراب", 309 | "سهره", 310 | "سهند", 311 | "سیامک", 312 | "سیاوش", 313 | "سیبوبه ‌", 314 | "سیما", 315 | "سیمدخت", 316 | "سینا", 317 | "سیمین", 318 | "سیمین دخت", 319 | "شاپرک", 320 | "شادی", 321 | "شادمهر", 322 | "شاران", 323 | "شاهپور", 324 | "شاهدخت", 325 | "شاهرخ", 326 | "شاهین", 327 | "شاهیندخت", 328 | "شایسته", 329 | "شباهنگ", 330 | "شب بو", 331 | "شبدیز", 332 | "شبنم", 333 | "شراره", 334 | "شرمین", 335 | "شروین", 336 | "شکوفه", 337 | "شکفته", 338 | "شمشاد", 339 | "شمین", 340 | "شوان", 341 | "شمیلا", 342 | "شورانگیز", 343 | "شوری", 344 | "شهاب", 345 | "شهبار", 346 | "شهباز", 347 | "شهبال", 348 | "شهپر", 349 | "شهداد", 350 | "شهرآرا", 351 | "شهرام", 352 | "شهربانو", 353 | "شهرزاد", 354 | "شهرناز", 355 | "شهرنوش", 356 | "شهره", 357 | "شهریار", 358 | "شهرزاد", 359 | "شهلا", 360 | "شهنواز", 361 | "شهین", 362 | "شیبا", 363 | "شیدا", 364 | "شیده", 365 | "شیردل", 366 | "شیرزاد", 367 | "شیرنگ", 368 | "شیرو", 369 | "شیرین دخت", 370 | "شیما", 371 | "شینا", 372 | "شیرین", 373 | "شیوا", 374 | "طوس", 375 | "طوطی", 376 | "طهماسب", 377 | "طهمورث", 378 | "غوغا", 379 | "غنچه", 380 | "فتانه", 381 | "فدا", 382 | "فراز", 383 | "فرامرز", 384 | "فرانک", 385 | "فراهان", 386 | "فربد", 387 | "فربغ", 388 | "فرجاد", 389 | "فرخ", 390 | "فرخ پی", 391 | "فرخ داد", 392 | "فرخ رو", 393 | "فرخ زاد", 394 | "فرخ لقا", 395 | "فرخ مهر", 396 | "فرداد", 397 | "فردیس", 398 | "فرین", 399 | "فرزاد", 400 | "فرزام", 401 | "فرزان", 402 | "فرزانه", 403 | "فرزین", 404 | "فرشاد", 405 | "فرشته", 406 | "فرشید", 407 | "فرمان", 408 | "فرناز", 409 | "فرنگیس", 410 | "فرنود", 411 | "فرنوش", 412 | "فرنیا", 413 | "فروتن", 414 | "فرود", 415 | "فروز", 416 | "فروزان", 417 | "فروزش", 418 | "فروزنده", 419 | "فروغ", 420 | "فرهاد", 421 | "فرهنگ", 422 | "فرهود", 423 | "فربار", 424 | "فریبا", 425 | "فرید", 426 | "فریدخت", 427 | "فریدون", 428 | "فریمان", 429 | "فریناز", 430 | "فرینوش", 431 | "فریوش", 432 | "فیروز", 433 | "فیروزه", 434 | "قابوس", 435 | "قباد", 436 | "قدسی", 437 | "کابان", 438 | "کابوک", 439 | "کارا", 440 | "کارو", 441 | "کاراکو", 442 | "کامبخت", 443 | "کامبخش", 444 | "کامبیز", 445 | "کامجو", 446 | "کامدین", 447 | "کامران", 448 | "کامراوا", 449 | "کامک", 450 | "کامنوش", 451 | "کامیار", 452 | "کانیار", 453 | "کاووس", 454 | "کاوه", 455 | "کتایون", 456 | "کرشمه", 457 | "کسری", 458 | "کلاله", 459 | "کمبوجیه", 460 | "کوشا", 461 | "کهبد", 462 | "کهرام", 463 | "کهزاد", 464 | "کیارش", 465 | "کیان", 466 | "کیانا", 467 | "کیانچهر", 468 | "کیاندخت", 469 | "کیانوش", 470 | "کیاوش", 471 | "کیخسرو", 472 | "کیقباد", 473 | "کیکاووس", 474 | "کیوان", 475 | "کیوان دخت", 476 | "کیومرث", 477 | "کیهان", 478 | "کیاندخت", 479 | "کیهانه", 480 | "گرد آفرید", 481 | "گردان", 482 | "گرشا", 483 | "گرشاسب", 484 | "گرشین", 485 | "گرگین", 486 | "گزل", 487 | "گشتاسب", 488 | "گشسب", 489 | "گشسب بانو", 490 | "گل", 491 | "گل آذین", 492 | "گل آرا‌", 493 | "گلاره", 494 | "گل افروز", 495 | "گلاله", 496 | "گل اندام", 497 | "گلاویز", 498 | "گلباد", 499 | "گلبار", 500 | "گلبام", 501 | "گلبان", 502 | "گلبانو", 503 | "گلبرگ", 504 | "گلبو", 505 | "گلبهار", 506 | "گلبیز", 507 | "گلپاره", 508 | "گلپر", 509 | "گلپری", 510 | "گلپوش", 511 | "گل پونه", 512 | "گلچین", 513 | "گلدخت", 514 | "گلدیس", 515 | "گلربا", 516 | "گلرخ", 517 | "گلرنگ", 518 | "گلرو", 519 | "گلشن", 520 | "گلریز", 521 | "گلزاد", 522 | "گلزار", 523 | "گلسا", 524 | "گلشید", 525 | "گلنار", 526 | "گلناز", 527 | "گلنسا", 528 | "گلنواز", 529 | "گلنوش", 530 | "گلی", 531 | "گودرز", 532 | "گوماتو", 533 | "گهر چهر", 534 | "گوهر ناز", 535 | "گیتی", 536 | "گیسو", 537 | "گیلدا", 538 | "گیو", 539 | "لادن", 540 | "لاله", 541 | "لاله رخ", 542 | "لاله دخت", 543 | "لبخند", 544 | "لقاء", 545 | "لومانا", 546 | "لهراسب", 547 | "مارال", 548 | "ماری", 549 | "مازیار", 550 | "ماکان", 551 | "مامک", 552 | "مانا", 553 | "ماندانا", 554 | "مانوش", 555 | "مانی", 556 | "مانیا", 557 | "ماهان", 558 | "ماهاندخت", 559 | "ماه برزین", 560 | "ماه جهان", 561 | "ماهچهر", 562 | "ماهدخت", 563 | "ماهور", 564 | "ماهرخ", 565 | "ماهزاد", 566 | "مردآویز", 567 | "مرداس", 568 | "مرزبان", 569 | "مرمر", 570 | "مزدک", 571 | "مژده", 572 | "مژگان", 573 | "مستان", 574 | "مستانه", 575 | "مشکاندخت", 576 | "مشکناز", 577 | "مشکین دخت", 578 | "منیژه", 579 | "منوچهر", 580 | "مهبانو", 581 | "مهبد", 582 | "مه داد", 583 | "مهتاب", 584 | "مهدیس", 585 | "مه جبین", 586 | "مه دخت", 587 | "مهر آذر", 588 | "مهر آرا", 589 | "مهر آسا", 590 | "مهر آفاق", 591 | "مهر افرین", 592 | "مهرآب", 593 | "مهرداد", 594 | "مهر افزون", 595 | "مهرام", 596 | "مهران", 597 | "مهراندخت", 598 | "مهراندیش", 599 | "مهرانفر", 600 | "مهرانگیز", 601 | "مهرداد", 602 | "مهر دخت", 603 | "مهرزاده ‌", 604 | "مهرناز", 605 | "مهرنوش", 606 | "مهرنکار", 607 | "مهرنیا", 608 | "مهروز", 609 | "مهری", 610 | "مهریار", 611 | "مهسا", 612 | "مهستی", 613 | "مه سیما", 614 | "مهشاد", 615 | "مهشید", 616 | "مهنام", 617 | "مهناز", 618 | "مهنوش", 619 | "مهوش", 620 | "مهیار", 621 | "مهین", 622 | "مهین دخت", 623 | "میترا", 624 | "میخک", 625 | "مینا", 626 | "مینا دخت", 627 | "مینو", 628 | "مینودخت", 629 | "مینو فر", 630 | "نادر", 631 | "ناز آفرین", 632 | "نازبانو", 633 | "نازپرور", 634 | "نازچهر", 635 | "نازفر", 636 | "نازلی", 637 | "نازی", 638 | "نازیدخت", 639 | "نامور", 640 | "ناهید", 641 | "ندا", 642 | "نرسی", 643 | "نرگس", 644 | "نرمک", 645 | "نرمین", 646 | "نریمان", 647 | "نسترن", 648 | "نسرین", 649 | "نسرین دخت", 650 | "نسرین نوش", 651 | "نکیسا", 652 | "نگار", 653 | "نگاره", 654 | "نگارین", 655 | "نگین", 656 | "نوا", 657 | "نوش", 658 | "نوش آذر", 659 | "نوش آور", 660 | "نوشا", 661 | "نوش آفرین", 662 | "نوشدخت", 663 | "نوشروان", 664 | "نوشفر", 665 | "نوشناز", 666 | "نوشین", 667 | "نوید", 668 | "نوین", 669 | "نوین دخت", 670 | "نیش ا", 671 | "نیک بین", 672 | "نیک پی", 673 | "نیک چهر", 674 | "نیک خواه", 675 | "نیکداد", 676 | "نیکدخت", 677 | "نیکدل", 678 | "نیکزاد", 679 | "نیلوفر", 680 | "نیما", 681 | "وامق", 682 | "ورجاوند", 683 | "وریا", 684 | "وشمگیر", 685 | "وهرز", 686 | "وهسودان", 687 | "ویدا", 688 | "ویس", 689 | "ویشتاسب", 690 | "ویگن", 691 | "هژیر", 692 | "هخامنش", 693 | "هربد( هیربد )", 694 | "هرمز", 695 | "همایون", 696 | "هما", 697 | "همادخت", 698 | "همدم", 699 | "همراز", 700 | "همراه", 701 | "هنگامه", 702 | "هوتن", 703 | "هور", 704 | "هورتاش", 705 | "هورچهر", 706 | "هورداد", 707 | "هوردخت", 708 | "هورزاد", 709 | "هورمند", 710 | "هوروش", 711 | "هوشنگ", 712 | "هوشیار", 713 | "هومان", 714 | "هومن", 715 | "هونام", 716 | "هویدا", 717 | "هیتاسب", 718 | "هیرمند", 719 | "هیما", 720 | "هیوا", 721 | "یادگار", 722 | "یاسمن ( یاسمین )", 723 | "یاشار", 724 | "یاور", 725 | "یزدان", 726 | "یگانه", 727 | "یوشیتا" 728 | ], 729 | "last_name": [ 730 | "عارف", 731 | "عاشوری", 732 | "عالی", 733 | "عبادی", 734 | "عبدالکریمی", 735 | "عبدالملکی", 736 | "عراقی", 737 | "عزیزی", 738 | "عصار", 739 | "عقیلی", 740 | "علم", 741 | "علم‌الهدی", 742 | "علی عسگری", 743 | "علی‌آبادی", 744 | "علیا", 745 | "علی‌پور", 746 | "علی‌زمانی", 747 | "عنایت", 748 | "غضنفری", 749 | "غنی", 750 | "فارسی", 751 | "فاطمی", 752 | "فانی", 753 | "فتاحی", 754 | "فرامرزی", 755 | "فرج", 756 | "فرشیدورد", 757 | "فرمانفرمائیان", 758 | "فروتن", 759 | "فرهنگ", 760 | "فریاد", 761 | "فنایی", 762 | "فنی‌زاده", 763 | "فولادوند", 764 | "فهمیده", 765 | "قاضی", 766 | "قانعی", 767 | "قانونی", 768 | "قمیشی", 769 | "قنبری", 770 | "قهرمان", 771 | "قهرمانی", 772 | "قهرمانیان", 773 | "قهستانی", 774 | "کاشی", 775 | "کاکاوند", 776 | "کامکار", 777 | "کاملی", 778 | "کاویانی", 779 | "کدیور", 780 | "کردبچه", 781 | "کرمانی", 782 | "کریمی", 783 | "کلباسی", 784 | "کمالی", 785 | "کوشکی", 786 | "کهنمویی", 787 | "کیان", 788 | "کیانی (نام خانوادگی)", 789 | "کیمیایی", 790 | "گل محمدی", 791 | "گلپایگانی", 792 | "گنجی", 793 | "لاجوردی", 794 | "لاچینی", 795 | "لاهوتی", 796 | "لنکرانی", 797 | "لوکس", 798 | "مجاهد", 799 | "مجتبایی", 800 | "مجتبوی", 801 | "مجتهد شبستری", 802 | "مجتهدی", 803 | "مجرد", 804 | "محجوب", 805 | "محجوبی", 806 | "محدثی", 807 | "محمدرضایی", 808 | "محمدی", 809 | "مددی", 810 | "مرادخانی", 811 | "مرتضوی", 812 | "مستوفی", 813 | "مشا", 814 | "مصاحب", 815 | "مصباح", 816 | "مصباح‌زاده", 817 | "مطهری", 818 | "مظفر", 819 | "معارف", 820 | "معروف", 821 | "معین", 822 | "مفتاح", 823 | "مفتح", 824 | "مقدم", 825 | "ملایری", 826 | "ملک", 827 | "ملکیان", 828 | "منوچهری", 829 | "موحد", 830 | "موسوی", 831 | "موسویان", 832 | "مهاجرانی", 833 | "مهدی‌پور", 834 | "میرباقری", 835 | "میردامادی", 836 | "میرزاده", 837 | "میرسپاسی", 838 | "میزبانی", 839 | "ناظری", 840 | "نامور", 841 | "نجفی", 842 | "ندوشن", 843 | "نراقی", 844 | "نعمت‌زاده", 845 | "نقدی", 846 | "نقیب‌زاده", 847 | "نواب", 848 | "نوبخت", 849 | "نوبختی", 850 | "نهاوندی", 851 | "نیشابوری", 852 | "نیلوفری", 853 | "واثقی", 854 | "واعظ", 855 | "واعظ‌زاده", 856 | "واعظی", 857 | "وکیلی", 858 | "هاشمی", 859 | "هاشمی رفسنجانی", 860 | "هاشمیان", 861 | "هامون", 862 | "هدایت", 863 | "هراتی", 864 | "هروی", 865 | "همایون", 866 | "همت", 867 | "همدانی", 868 | "هوشیار", 869 | "هومن", 870 | "یاحقی", 871 | "یادگار", 872 | "یثربی", 873 | "یلدا" 874 | ], 875 | "prefix": [ 876 | "آقای", 877 | "خانم", 878 | "دکتر" 879 | ] 880 | } 881 | } 882 | } 883 | } 884 | --------------------------------------------------------------------------------