├── .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 | 
2 | [](https://travis-ci.org/vadymmarkov/Fakery)
3 | [](http://cocoadocs.org/docsets/Fakery)
4 | [](http://cocoadocs.org/docsets/Fakery)
5 | [](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 |
--------------------------------------------------------------------------------