├── .github ├── FUNDING.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── build_app.yml │ ├── configure_app.yml │ └── replicate_release.yml ├── .gitignore ├── App.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── App.yml ├── Assets.xcassets ├── AccentColor.colorset │ └── Contents.json ├── AppIcon.appiconset │ └── Contents.json └── Contents.json ├── CONTRIBUTION.txt ├── Info.plist ├── LICENSE.AGPL ├── LICENSE_EXCEPTION.FAIR ├── Package.swift ├── README.md ├── Sources └── App │ ├── App.yml │ ├── AppMain.swift │ ├── Container.swift │ ├── ContentView.swift │ ├── Resources │ ├── App.yml │ ├── FUNDING.yml │ ├── LICENSE.AGPL │ ├── ar.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ca.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── cs.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── da.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── de.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── el.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── en.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── en_AU.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── en_GB.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── es.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── es_419.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── fa.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── fi.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── fr.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── fr_CA.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── he.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── hi.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── hr.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── hu.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── id.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── it.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ja.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ko.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ms.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── nl.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── no.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── pl.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── pt.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── pt_PT.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ro.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── ru.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── sk.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── sv.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── th.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── tr.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── uk.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── vi.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── zh-Hans.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ └── zh-Hant.lproj │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ └── Localizable.stringsdict │ ├── SettingsView.swift │ ├── Store.swift │ └── WelcomeView.swift ├── Tests └── AppTests │ └── AppTests.swift ├── appfair.xcconfig ├── docs ├── _config.yml ├── index.md └── screenshots │ └── README ├── project.xcodeproj ├── project.pbxproj └── xcshareddata │ └── xcschemes │ └── AppFairApp.xcscheme ├── sandbox-ios.entitlements ├── sandbox-macos.entitlements └── xcode.swift /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | 15 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | This is an App Fair Integrate-Release Pull Request. 2 | 3 | Creating or updating this PR will validate and publish 4 | your forked App release when the following conditions are met: 5 | 6 | 1. The title of your Pull Request must be: `app.App-Name`. 7 | It must match `CFBundleIdentifier` in `Info.plist`. 8 | 9 | 2. Release artifacts must exist for the semantic release tag version. 10 | It must match `CFBundleShortVersionString` in `Info.plist`. 11 | 12 | This PR will be automatically closed upon completion. 13 | Subsequent releases of the app can be published with a new PR. 14 | 15 | For more information, see: 16 | 17 | https://www.appfair.net/#integration-release-pull-requests 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/workflows/build_app.yml: -------------------------------------------------------------------------------- 1 | name: "Build App" 2 | # Build App runs in the forked repo with 3 | # any push to main or semver tag. 4 | # Tagged pushes will automatically create a release 5 | # with the built artifacts. 6 | # 7 | # See: https://www.appfair.net 8 | on: 9 | push: 10 | branches: [ main ] 11 | tags: "[0-9]+.[0-9]+.[0-9]+" 12 | 13 | jobs: 14 | call-workflow: 15 | uses: appfair/fairground/.github/workflows/fair.yml@main 16 | secrets: 17 | # These optional secrets can be added for app notarization. 18 | NOTARY_TEAMID: ${{ secrets.NOTARY_TEAMID }} 19 | NOTARY_USERID: ${{ secrets.NOTARY_USERID }} 20 | NOTARY_PASSWORD: ${{ secrets.NOTARY_PASSWORD }} 21 | NOTARY_CERTKEY_P12_BASE64: ${{ secrets.NOTARY_CERTKEY_P12_BASE64 }} 22 | NOTARY_CERTKEY_PASSWORD: ${{ secrets.NOTARY_CERTKEY_PASSWORD }} 23 | 24 | -------------------------------------------------------------------------------- /.github/workflows/configure_app.yml: -------------------------------------------------------------------------------- 1 | name: "Configure App" 2 | # Configure App sets up the app with the correct name and version. 3 | # 4 | # See: https://www.appfair.net 5 | on: 6 | workflow_dispatch: 7 | inputs: 8 | version: 9 | type: string 10 | description: 'App Version' 11 | required: true 12 | default: '0.0.1' 13 | build_ios: 14 | type: boolean 15 | description: 'Build iOS App' 16 | required: true 17 | default: true 18 | build_macos: 19 | type: boolean 20 | description: 'Build macOS App' 21 | required: true 22 | default: true 23 | 24 | jobs: 25 | call-workflow: 26 | uses: appfair/fairground/.github/workflows/configure_app.yml@main 27 | with: 28 | version: ${{ github.event.inputs.version }} 29 | build_ios: ${{ github.event.inputs.build_ios == 'true' }} 30 | build_macos: ${{ github.event.inputs.build_macos == 'true' }} 31 | 32 | permissions: 33 | actions: write 34 | checks: write 35 | contents: write 36 | deployments: write 37 | id-token: write 38 | issues: write 39 | discussions: write 40 | packages: write 41 | pages: write 42 | pull-requests: write 43 | repository-projects: write 44 | security-events: write 45 | statuses: write 46 | 47 | -------------------------------------------------------------------------------- /.github/workflows/replicate_release.yml: -------------------------------------------------------------------------------- 1 | name: "Replicate Release" 2 | # Integrate release runs in the base repo 3 | # when it receives a pull request 4 | # 5 | # This workflow only needs to be configured 6 | # by the base (upstream) fairground. 7 | # 8 | # See: https://www.appfair.net 9 | on: 10 | pull_request_target: 11 | branches: [ main ] 12 | types: [opened, reopened] 13 | 14 | jobs: 15 | call-workflow: 16 | uses: appfair/fairground/.github/workflows/fair.yml@main 17 | secrets: inherit 18 | with: 19 | fairseal_issuer: appfairbot 20 | 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .*.swp 2 | fastlane/ 3 | .fairtool/ 4 | _site/ 5 | Gemfile 6 | Gemfile.lock 7 | .jekyll-cache 8 | .DS_Store 9 | .build 10 | xcuserdata/ 11 | build/ 12 | staging/ 13 | DerivedData/ 14 | *.moved-aside 15 | *.pbxuser 16 | !default.pbxuser 17 | *.mode1v3 18 | !default.mode1v3 19 | *.mode2v3 20 | !default.mode2v3 21 | *.perspectivev3 22 | !default.perspectivev3 23 | *.hmap 24 | *.ipa 25 | *.dSYM.zip 26 | *.dSYM 27 | timeline.xctimeline 28 | playground.xcworkspace 29 | Packages/ 30 | Package.pins 31 | Package.resolved 32 | .swiftpm 33 | .build/ 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /App.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /App.yml: -------------------------------------------------------------------------------- 1 | # App metadata; see https://appfair.net/#App.yml 2 | app: 3 | #name: "App Name" # 30-char limit 4 | #subtitle: "A brief summary of the App" # 30-char limit 5 | #keywords: "appfair,free" # comma separated keywords ; 100-char limit 6 | #description: "A complete description of the app" # 4000-char limit 7 | #notes: "Some notes about this app for reviewers." 8 | 9 | # primary_category and secondary_category can be any of: FOOD_AND_DRINK, BUSINESS, EDUCATION, SOCIAL_NETWORKING, BOOKS, SPORTS, FINANCE, REFERENCE, GRAPHICS_AND_DESIGN, DEVELOPER_TOOLS, HEALTH_AND_FITNESS, MUSIC, WEATHER, TRAVEL, ENTERTAINMENT, STICKERS, GAMES, LIFESTYLE, MEDICAL, MAGAZINES_AND_NEWSPAPERS, UTILITIES, SHOPPING, PRODUCTIVITY, NEWS, PHOTO_AND_VIDEO, NAVIGATION 10 | 11 | primary_category: "UTILITIES" 12 | secondary_category: "PRODUCTIVITY" 13 | 14 | 15 | # translations for the name, subtitle, description, and keywords 16 | # Supported language keys are: # ar-SA, ca, cs, da, de-DE, el, en-AU, en-CA, en-GB, en-US, es-ES, es-MX, fi, fr-CA, fr-FR, he, hi, hr, hu, id, it, ja, ko, ms, nl-NL, no, pl, pt-BR, pt-PT, ro, ru, sk, sv, th, tr, uk, vi, zh-Hans, zh-Hant 17 | 18 | localizations: 19 | #fr-FR: 20 | # name: "App Name in French" 21 | # subtitle: "App Subtitle in French" 22 | # description: "App Description in French" 23 | 24 | # marketplace-issued indentifiers for the distribution channels for this app 25 | markets: 26 | #testflight: "0123456789" # the assigned TestFlight id 27 | #testflighturl: "https://…" # the public TestFlight beta link 28 | #appstore: "0123456789" # the assigned App Store id 29 | #appstoreurl: "https://…" # the official App Store landing page 30 | #playstore: "123456543210" # the assigned Play Store id 31 | 32 | # Pages / Jekyll configuration: 33 | remote_theme: "appfair/fairapp-theme" 34 | 35 | # the app icon is generated from a simple SVG path and a tint color 36 | icon: 37 | # gradient tint color (symbolic name or "#RRGGBB") 38 | tint: "red" 39 | # SVG path to place in the center of the icon 40 | path: "M0 200 v-200 h200 a100,100 90 0,1 0,200 a100,100 90 0,1 -200,0 z" 41 | 42 | 43 | -------------------------------------------------------------------------------- /Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color-example-setting" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "red" : "0xF9", 9 | "green" : "0xC4", 10 | "blue" : "0xA0" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "idiom" : "universal" 23 | } 24 | ], 25 | "info" : { 26 | "author" : "xcode", 27 | "version" : 1 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | }, 93 | { 94 | "idiom" : "mac", 95 | "scale" : "1x", 96 | "size" : "16x16" 97 | }, 98 | { 99 | "idiom" : "mac", 100 | "scale" : "2x", 101 | "size" : "16x16" 102 | }, 103 | { 104 | "idiom" : "mac", 105 | "scale" : "1x", 106 | "size" : "32x32" 107 | }, 108 | { 109 | "idiom" : "mac", 110 | "scale" : "2x", 111 | "size" : "32x32" 112 | }, 113 | { 114 | "idiom" : "mac", 115 | "scale" : "1x", 116 | "size" : "128x128" 117 | }, 118 | { 119 | "idiom" : "mac", 120 | "scale" : "2x", 121 | "size" : "128x128" 122 | }, 123 | { 124 | "idiom" : "mac", 125 | "scale" : "1x", 126 | "size" : "256x256" 127 | }, 128 | { 129 | "idiom" : "mac", 130 | "scale" : "2x", 131 | "size" : "256x256" 132 | }, 133 | { 134 | "idiom" : "mac", 135 | "scale" : "1x", 136 | "size" : "512x512" 137 | }, 138 | { 139 | "idiom" : "mac", 140 | "scale" : "2x", 141 | "size" : "512x512" 142 | } 143 | ], 144 | "info" : { 145 | "author" : "xcode", 146 | "version" : 1 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /CONTRIBUTION.txt: -------------------------------------------------------------------------------- 1 | CONTRIBUTION SUBMISSION POLICY: 2 | 3 | By intentionally submitting any modifications, corrections or 4 | derivatives to this work, or any other work intended for use with this 5 | library, you confirm that you are the copyright holder for those contributions 6 | and you grant to the App Fair Project a nonexclusive, worldwide, irrevocable, 7 | royalty-free, perpetual, license to use, copy, create derivative 8 | works based on those contributions, and sublicense and distribute 9 | those contributions and any derivatives thereof. 10 | 11 | 12 | -------------------------------------------------------------------------------- /Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AppFairIconSymbol 6 | $(ICON_SYMBOL) 7 | AppFairIconTint 8 | $(ICON_TINT) 9 | CFBundleDevelopmentRegion 10 | en 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | $(PRODUCT_NAME) 19 | CFBundlePackageType 20 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 21 | CFBundleShortVersionString 22 | $(MARKETING_VERSION) 23 | CFBundleURLTypes 24 | 25 | 26 | CFBundleTypeRole 27 | Editor 28 | CFBundleURLName 29 | $(PRODUCT_NAME) 30 | CFBundleURLSchemes 31 | 32 | $(PRODUCT_BUNDLE_IDENTIFIER) 33 | 34 | 35 | 36 | CFBundleVersion 37 | $(CURRENT_PROJECT_VERSION) 38 | FairUsage 39 | 40 | com.apple.security.files.user-selected.read-only 41 | This app needs to read local files in order to load user-selected books 42 | com.apple.security.files.user-selected.read-write 43 | This app needs to read and write files in order to… 44 | com.apple.security.network.client 45 | This app needs to access the network in order to download books 46 | 47 | ITSAppUsesNonExemptEncryption 48 | 49 | LSApplicationCategoryType 50 | $(APP_CATEGORY) 51 | LSApplicationQueriesSchemes 52 | 53 | appfair 54 | 55 | LSMinimumSystemVersion 56 | $(MACOSX_DEPLOYMENT_TARGET) 57 | LSSupportsOpeningDocumentsInPlace 58 | 59 | LSUIPresentationMode 60 | 0 61 | NSAppTransportSecurity 62 | 63 | NSAllowsArbitraryLoads 64 | 65 | 66 | NSAppleEventsUsageDescription 67 | AppleScript can be used by this app. 68 | NSAppleScriptEnabled 69 | 70 | NSHumanReadableCopyright 71 | GNU Affero General Public License 72 | UIApplicationSceneManifest 73 | 74 | UIApplicationSupportsMultipleScenes 75 | 76 | 77 | UIApplicationSupportsIndirectInputEvents 78 | 79 | UILaunchScreen 80 | 81 | UISupportedInterfaceOrientations 82 | 83 | UIInterfaceOrientationPortrait 84 | UIInterfaceOrientationPortraitUpsideDown 85 | UIInterfaceOrientationLandscapeLeft 86 | UIInterfaceOrientationLandscapeRight 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /LICENSE_EXCEPTION.FAIR: -------------------------------------------------------------------------------- 1 | The software in this package is distributed under the 2 | GNU Affero General Public License version 3 or later 3 | with a special exception described below. 4 | 5 | A copy of GNU Affero General Public License (AGPL) is included in 6 | this distribution, in the file LICENSE.AGPL. 7 | 8 | App Fair Linking Exception: 9 | 10 | Linking this library statically or dynamically with other modules is 11 | making a combined work based on this library. Thus, the terms and 12 | conditions of the GNU Affero General Public License cover the whole 13 | combination. 14 | 15 | As a special exception, the copyright holders of this library give you 16 | permission to link this library with independent modules to produce an 17 | executable, regardless of the license terms of these independent 18 | modules, and to copy and distribute the resulting executable under 19 | terms of your choice, provided that you also meet, for each linked 20 | independent module, the terms and conditions of the license of that 21 | module. An independent module is a module which is not derived from 22 | or based on this library. If you modify this library, you may extend 23 | this exception to your version of the library, but you are not 24 | obligated to do so. If you do not wish to do so, delete this 25 | exception statement from your version. 26 | 27 | 28 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.7 2 | import PackageDescription 3 | 4 | /// This package template is forked from [appfair/App](https://github.com/appfair/App/fork) 5 | /// and provides support for building and distributing an [App Fair](https://appfair.net) app. 6 | /// 7 | /// Additional source-only dependencies can be added, but the initial "FairApp" dependency must 8 | /// remain unchanged in order for the package to be eligible for App Fair integration and distribution. 9 | /// 10 | /// In order to set up a new App Fair project in a fresh fork, run: 11 | /// ``` 12 | /// swift package --allow-writing-to-package-directory fairtool app 13 | /// ``` 14 | let package = Package( 15 | name: "App", // do not rename 16 | defaultLocalization: "en", 17 | platforms: [ .macOS(.v12), .iOS(.v15) ], 18 | products: [ .library(name: "App", type: .dynamic, targets: ["App"]) ], 19 | dependencies: [ 20 | .package(url: "https://github.com/fair-ground/Fair", from: "0.9.1"), // must be first 21 | ], 22 | targets: [ 23 | .target(name: "App", dependencies: [ 24 | .product(name: "FairApp", package: "Fair"), // required 25 | //.product(name: "FairKit", package: "Fair"), // optional enhancements 26 | ], resources: [ 27 | .process("Resources"), // processed resources 28 | ], plugins: [ 29 | //.plugin(name: "FairBuild", package: "Fair"), 30 | ]), 31 | .testTarget(name: "AppTests", dependencies: ["App"]), 32 | ] 33 | ) 34 | 35 | // MARK: fair-ground package validation 36 | 37 | // The following validations are required in order for the package 38 | // to be accepted by the appfair's integration-release workflow. 39 | // 40 | // These lines can be removed from your project, but the 41 | // rules will be enforced during the `integrate` phase regardless. 42 | protocol PDep { var url: String? { get } } 43 | extension Package.Dependency : PDep { } 44 | 45 | precondition(package.name == "App", "Package.swift name must be 'App', but was: '\(package.name)'") 46 | precondition(!package.dependencies.isEmpty, "Package.swift must have at least one dependency") 47 | precondition((package.dependencies[0] as PDep).url == "https://github.com/fair-ground/Fair", "first Package.swift dependency must be 'https://github.com/fair-ground/Fair") 48 | 49 | precondition(package.products.count == 1, "Package.swift must have exactly one product") 50 | precondition(package.products.first?.name == "App", "Package.swift product must be named 'App', but was: '\(package.products.first?.name ?? "")'") 51 | 52 | // validate target names and source paths 53 | 54 | precondition(package.targets.count == 2, "package must have exactly two targets named 'App' and 'AppTests'") 55 | 56 | precondition(package.targets.first?.name == "App", "first target must be named 'App', but was: '\(package.targets.first?.name ?? "")'") 57 | precondition(package.targets.first?.path == nil || package.targets.first?.path == "Sources", "first target path must be named 'Sources', but was: '\(package.targets.first?.path ?? "")'") 58 | precondition(package.targets.first?.sources == nil, "first target sources must be empty") 59 | 60 | precondition(package.targets.last?.name == "AppTests", "second target must be named 'AppTests', but was: \(package.targets.last?.name ?? "")") 61 | precondition(package.targets.last?.path == nil || package.targets.last?.path == "Tests", "second target must be named 'Tests', but was: '\(package.targets.last?.path ?? "")'") 62 | precondition(package.targets.last?.sources == nil, "second target sources must be empty") 63 | 64 | precondition(package.targets.first?.dependencies.isEmpty == false, "package target must have at least one dependency") 65 | 66 | // Target.Depencency is opaque and non-equatable, so resort to using the description for validation 67 | precondition(String(describing: package.targets[0].dependencies[0]).hasPrefix("productItem(name: \"FairApp\", package: Optional(\"Fair\")") == true, "first package dependency must be FairApp") 68 | 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## App-Name: an App Fair app 2 | 3 | The _Description_ section of the `README.md` file contains the description 4 | of this app as it will appear in App Fair. 5 | 6 | It supports **basic** formatting, but not images, lists, or links. 7 | 8 | ## Installation 9 | 10 | ### App Fair Installation 11 | 12 | Once the initial release has been created, 13 | App-Name can be downloaded and installed using 14 | [App Fair.app](https://www.appfair.app) 15 | by opening 16 | [appfair.app/fair?app=App-Name](https://appfair.app/fair?app=App-Name). 17 | 18 | ## Support 19 | 20 | The landing page for this app is available at 21 | [https://App-Name.github.io/App/](https://App-Name.github.io/App/). 22 | 23 | Community Support for this app is available on the 24 | [Discussion](../../discussions) forums. 25 | 26 | Problem reports and suggestions for improvement can be found in the 27 | [Issues](../../issues) list. 28 | 29 | ## Development 30 | 31 | Create and distribute your own app by 32 | [forking this repository](../../fork). 33 | Learn more at [appfair.net](https://appfair.net). 34 | -------------------------------------------------------------------------------- /Sources/App/App.yml: -------------------------------------------------------------------------------- 1 | ../../App.yml -------------------------------------------------------------------------------- /Sources/App/AppMain.swift: -------------------------------------------------------------------------------- 1 | /** 2 | This program is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU Affero General Public License as 4 | published by the Free Software Foundation, either version 3 of the 5 | License, or (at your option) any later version. 6 | 7 | This program is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU Affero General Public License for more details. 11 | 12 | The full text of the GNU Affero General Public License can be 13 | found in the COPYING.txt file or at https://www.gnu.org/licenses/ 14 | 15 | Linking this library statically or dynamically with other modules is 16 | making a combined work based on this library. Thus, the terms and 17 | conditions of the GNU Affero General Public License cover the whole 18 | combination. 19 | 20 | As a special exception, the copyright holders of this library give you 21 | permission to link this library with independent modules to produce an 22 | executable, regardless of the license terms of these independent 23 | modules, and to copy and distribute the resulting executable under 24 | terms of your choice, provided that you also meet, for each linked 25 | independent module, the terms and conditions of the license of that 26 | module. An independent module is a module which is not derived from 27 | or based on this library. If you modify this library, you may extend 28 | this exception to your version of the library, but you are not 29 | obligated to do so. If you do not wish to do so, delete this 30 | exception statement from your version. 31 | */ 32 | import FairApp 33 | 34 | // MARK: DO NOT MODIFY 35 | 36 | // This file is validated by the fairground and any changes will cause integration to fail. 37 | 38 | /// The `FairContainer` for the current app is the entry point 39 | /// to the app's initial launch, both in CLI and GUI forms. 40 | /// 41 | /// - Note: This source in `AppMain.swift` must not be modified or else integration will fail; 42 | /// App customization should be implemented with extensions in `Container.swift` 43 | @main public enum AppContainer : FairApp.FairContainer { 44 | public static func main() async throws { try await launch(bundle: Bundle.module) } 45 | } 46 | 47 | // MARK: Localization 48 | 49 | /// This file contains references to the localized translated Text embedded in the `FairApp` module. 50 | /// 51 | /// The App Fair's translation strategy is to keep every translatable string in the `Sources/App/Resources/en.lproj/Localizable.strings` file. 52 | /// This provides a single unit that a translator can work with, rather than having translations scattered throughout multiple app metadata configuration files. 53 | /// At integration time, the `fairtool` will scan and assemble all the localized resources and use them in the various app storefront submission processes. 54 | 55 | /// By convention, those strings that are used by the build system will be prefixed with a "_". 56 | /// 57 | /// Note that even if you do not use these strings in your app, you must keep these strings defined in your project 58 | /// because the string generation for the storefront relies on the presence of these constants. 59 | public extension Locale { 60 | /// A translation of the app's keywords from the `Localized.strings` key: `_app-keywords`. 61 | /// 62 | /// This string is used both for runtime access to the localized app keywords, as well as part of the storefront metadata that is used to externally represent the app. 63 | /// 64 | /// Any changes to this string must be done in the corresponding `Sources/App/Resources/*.lproj/Localizable.strings` file. 65 | /// 66 | /// It corresponds to the fastlane key `keywords` https://docs.fastlane.tools/actions/deliver/#localized-metadata 67 | static let appKeywords = { NSLocalizedString("_app-keywords", bundle: .module, value: "app,fair,free", comment: "the comma-separated keywords (100 characters max), used both at runtime and on the storefront page") } 68 | 69 | /// A translation of the app's name from the `Localized.strings` key: `_app-name` 70 | /// 71 | /// Any changes to this string must be done in the corresponding `Sources/App/Resources/*.lproj/Localizable.strings` file. 72 | /// 73 | /// This string is used both for runtime access to the localized app name, as well as part of the storefront metadata that is used to externally represent the app. 74 | /// 75 | /// It corresponds to the fastlane key `name` https://docs.fastlane.tools/actions/deliver/#localized-metadata 76 | static let appName = { NSLocalizedString("_app-name", bundle: .module, value: "App Name", comment: "the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages") } 77 | 78 | /// A translation of the app's release notes from the `Localized.strings` key: `_app-release-notes`. 79 | /// 80 | /// Any changes to this string must be done in the corresponding `Sources/App/Resources/*.lproj/Localizable.strings` file. 81 | /// 82 | /// This string is used both for runtime access to the localized app release notes, as well as part of the storefront metadata that is used to externally represent the app. 83 | /// 84 | /// It corresponds to the fastlane key `releaseNotes` https://docs.fastlane.tools/actions/deliver/#localized-metadata 85 | static let appReleaseNotes = { NSLocalizedString("_app-release-notes", bundle: .module, value: """ 86 | This release contains feature enhancements, bug fixes, performance improvements, and much more! 87 | """, comment: "The release notes for the latest version of the app; used both in the welcome card and on storefront pages") } 88 | 89 | /// A translation of the app's subtitle from the `Localized.strings` key: `_app-subtitle`. 90 | /// 91 | /// This string is used both for runtime access to the localized app subtitle, as well as part of the storefront metadata that is used to externally represent the app. 92 | /// 93 | /// It corresponds to the fastlane key `subtitle` https://docs.fastlane.tools/actions/deliver/#localized-metadata 94 | static let appSubtitle = { NSLocalizedString("_app-subtitle", bundle: .module, value: "A free and open App Fair app", comment: "the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages") } 95 | 96 | /// A translation of the app's summary from the `Localized.strings` key: `_app-summary`. 97 | /// 98 | /// This string is used both for runtime access to the localized app summary, as well as part of the storefront metadata that is used to externally represent the app. 99 | /// 100 | /// It corresponds to the fastlane key `description` https://docs.fastlane.tools/actions/deliver/#localized-metadata 101 | static let appSummary = { NSLocalizedString("_app-summary", bundle: .module, value: """ 102 | This is an App Fair app. This text describes in plain language what the application does. 103 | 104 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 105 | 106 | The description should be written with a general audience in mind, using plain language and common terms. 107 | It will be translated into multiple languages by App Fair translation volunteers. 108 | """, comment: "the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages") } 109 | } 110 | 111 | 112 | #if canImport(SwiftUI) 113 | extension Text { 114 | /// Clients should use the localized form of `Text.init` in order to take advantage of the provided `Localizable.strings` localizations. 115 | @available(*, deprecated, message: "Facilitate translation with: `Text(”My String”, bundle: .module, comment: “description of My String for translators”)`", renamed: "Text.init(_:bundle:comment:)") 116 | internal init(_ key: LocalizedStringKey) { 117 | self.init(key, bundle: .module, comment: "no comment") 118 | } 119 | } 120 | #endif 121 | 122 | -------------------------------------------------------------------------------- /Sources/App/Container.swift: -------------------------------------------------------------------------------- 1 | import FairApp 2 | 3 | /// The entry point to creating a scene and settings. 4 | public extension AppContainer { 5 | @SceneBuilder static func rootScene(store: Store) -> some SwiftUI.Scene { 6 | WindowGroup { // or DocumentGroup 7 | FacetHostingView(store: store).environmentObject(store) 8 | } 9 | .commands { 10 | //SidebarCommands() 11 | FacetCommands(store: store) 12 | } 13 | } 14 | 15 | static func settingsView(store: Store) -> some SwiftUI.View { 16 | Store.AppFacets.settings 17 | .facetView(for: store) 18 | .environmentObject(store) 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /Sources/App/ContentView.swift: -------------------------------------------------------------------------------- 1 | import FairApp 2 | 3 | /// The main content view for the app. This is the starting point for customizing you app's behavior. 4 | struct ContentView: View { 5 | @EnvironmentObject var store: Store 6 | 7 | var body: some View { 8 | VStack { 9 | Text("Welcome to \(Locale.appName())!", bundle: .module, comment: "welcome title") 10 | .font(.title) 11 | } 12 | .frame(maxWidth: .infinity, maxHeight: .infinity) 13 | } 14 | } 15 | 16 | 17 | struct ContentView_Previews: PreviewProvider { 18 | static var previews: some View { 19 | ContentView() 20 | .environmentObject(Store()) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/App.yml: -------------------------------------------------------------------------------- 1 | ../../../App.yml -------------------------------------------------------------------------------- /Sources/App/Resources/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ../../../.github/FUNDING.yml -------------------------------------------------------------------------------- /Sources/App/Resources/LICENSE.AGPL: -------------------------------------------------------------------------------- 1 | ../../../LICENSE.AGPL -------------------------------------------------------------------------------- /Sources/App/Resources/ar.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Arabic (العربية) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ar.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ca.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/ca.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Catalan (català) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ca.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/cs.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Czech (čeština) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/cs.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/da.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Danish (dansk) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/da.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/de.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // German Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized German (Deutsch) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/de.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/el.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/el.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Greek (Ελληνικά) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/el.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized English (English) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/en.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_AU.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_AU.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized English (English) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_AU.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_GB.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_GB.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized English (English) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/en_GB.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/es.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Spanish Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Spanish (español) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/es.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/es_419.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/es_419.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Spanish (español) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/es_419.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/fa.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/fa.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Persian (فارسی) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/fa.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/fi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Finnish (suomi) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/fi.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // French Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized French (français) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr_CA.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr_CA.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized French (français) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/fr_CA.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/he.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/he.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Hebrew (עברית) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/he.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/hi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/hi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Hindi (हिन्दी) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/hi.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/hr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/hr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Croatian (hrvatski) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/hr.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/hu.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/hu.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Hungarian (magyar) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/hu.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/id.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/id.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Indonesian (Indonesia) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/id.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/it.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Italian Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Italian (italiano) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/it.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ja.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Japanese Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Japanese (日本語) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ja.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ko.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Korean Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/ko.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Korean (한국어) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ko.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ms.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/ms.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Malay (Bahasa Melayu) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ms.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/nl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Dutch (Nederlands) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/nl.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/no.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/no.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Norwegian (norsk) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/no.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/pl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Polish (polski) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/pl.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Portugese Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Portuguese (português) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt_PT.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt_PT.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Portuguese (português) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/pt_PT.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ro.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/ro.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Romanian (română) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ro.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/ru.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Russian Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Russian (русский) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/ru.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/sk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/sk.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Slovak (slovenčina) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/sk.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/sv.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/sv.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Swedish (svenska) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/sv.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/th.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/th.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Thai (ไทย) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/th.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/tr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Turkish (Türkçe) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/tr.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/uk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/uk.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Ukrainian (українська) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/uk.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/vi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // English Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | 6 | -------------------------------------------------------------------------------- /Sources/App/Resources/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Vietnamese (Tiếng Việt) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/vi.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hans.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Simplified Chinese Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Chinese (中文) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hans.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hant.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | // Traditional Chinese Info.plist translation for this App Fair app. 2 | // Translators wanted! Simply edit this file… 3 | 4 | // "CFBundleName" = "App Name"; 5 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // Localized Chinese (中文) strings for this App Fair App. 2 | // Translators: edit this file to fork the repository and contribute your translated strings. 3 | // Visit https://appfair.net/#translation for more details. 4 | 5 | /* the comma-separated keywords (100 characters max), used both at runtime and on the storefront page */ 6 | "_app-keywords" = "app,fair,free"; 7 | 8 | /* the app name (30 characters max) which should be simple, memorable, and distinctive; used both in the welcome card and on storefront pages */ 9 | "_app-name" = "App Name"; 10 | 11 | /* The release notes for the latest version of the app; used both in the welcome card and on storefront pages */ 12 | "_app-release-notes" = "This release contains feature enhancements, bug fixes, performance improvements, and much more!"; 13 | 14 | /* the subtitle of the app (30 characters max) meant summarize your app in a concise phrase that explains the value of your app in greater detail that the name; used both in the welcome card and on storefront pages */ 15 | "_app-subtitle" = "A free and open App Fair app"; 16 | 17 | /* the long form summary of the app, used both at runtime and on the storefront page; used both in the welcome card and on storefront pages */ 18 | "_app-summary" = "This is an App Fair app. This text describes in plain language what the application does. 19 | 20 | This summary will be used both in the app's Welcome screen, as well as in the description of the app on the storefront. 21 | 22 | The description should be written with a general audience in mind, using plain language and common terms. 23 | It will be translated into multiple languages by App Fair translation volunteers."; 24 | 25 | /* togglePreference preference title */ 26 | "Boolean Preference" = "Boolean Preference"; 27 | 28 | /* tab title for top-level “Content” facet */ 29 | "Content" = "Content"; 30 | 31 | /* numberPreference preference title */ 32 | "Numeric Preference" = "Numeric Preference"; 33 | 34 | /* preferences title */ 35 | "Preferences" = "Preferences"; 36 | 37 | /* tab title for top-level “Settings” facet */ 38 | "Settings" = "Settings"; 39 | 40 | /* tab title for top-level “Welcome” facet */ 41 | "Welcome" = "Welcome"; 42 | 43 | /* welcome title */ 44 | "Welcome to %@!" = "Welcome to %@!"; 45 | 46 | /* app intro card #2 banner markdown */ 47 | "welcome-02-banner" = "Get Started"; 48 | 49 | /* app intro card #2 caption markdown */ 50 | "welcome-02-caption" = "Start developing your app."; 51 | 52 | /* app intro card #2 content markdown */ 53 | "welcome-02-content" = "My app is my best friend. It is my life. I must master it as I must master my life."; 54 | 55 | /* app intro card #3 banner markdown */ 56 | "welcome-03-banner" = "Internationalize"; 57 | 58 | /* app intro card #3 caption markdown */ 59 | "welcome-03-caption" = "Bring your app to the World"; 60 | 61 | /* app intro card #3 content markdown */ 62 | "welcome-03-content" = "App Fair apps are global, with support for multiple languages and locales."; 63 | 64 | -------------------------------------------------------------------------------- /Sources/App/Resources/zh-Hant.lproj/Localizable.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d day(s) out of %d 6 | 7 | NSStringLocalizedFormatKey 8 | %#@value@ 9 | value 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d day out of %d 17 | other 18 | %d days out of %d 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/App/SettingsView.swift: -------------------------------------------------------------------------------- 1 | import FairApp 2 | 3 | /// The settings view for app, which includes the preferences along with standard settings. 4 | public struct SettingsView : View { 5 | @SceneStorage("selectedSetting") private var selectedSetting = OptionalStringStorage(value: nil) 6 | private let fixedSetting: Store.ConfigFacets? 7 | 8 | init(fixedSetting: Store.ConfigFacets? = nil) { 9 | self.fixedSetting = fixedSetting 10 | } 11 | 12 | public var body: some View { 13 | FacetBrowserView(nested: true, selection: fixedSetting != nil ? .constant(fixedSetting) : $selectedSetting.value) 14 | #if os(macOS) 15 | .frame(maxWidth: .infinity, maxHeight: .infinity) 16 | .frame(width: 600, height: 300) 17 | #endif 18 | } 19 | } 20 | 21 | /// A form that presents controls for manipualting the app's preferences. 22 | public struct PreferencesView : View { 23 | @EnvironmentObject var store: Store 24 | 25 | public var body: some View { 26 | Form { 27 | Toggle(isOn: store.$togglePreference) { 28 | Text("Boolean Preference", bundle: .module, comment: "togglePreference preference title") 29 | } 30 | Section { 31 | Slider(value: store.$numberPreference, in: 0...100, onEditingChanged: { _ in }) 32 | } header: { 33 | HStack { 34 | Text("Numeric Preference", bundle: .module, comment: "numberPreference preference title") 35 | Spacer() 36 | Text(round(store.numberPreference), format: .number) 37 | .font(.body.monospacedDigit()) 38 | } 39 | } 40 | } 41 | } 42 | } 43 | 44 | 45 | struct SettingsView_Previews: PreviewProvider { 46 | static var previews: some View { 47 | SettingsView(fixedSetting: Store.ConfigFacets.allCases.first) 48 | .environmentObject(Store()) 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Sources/App/Store.swift: -------------------------------------------------------------------------------- 1 | import FairApp 2 | 3 | /// The global app environment containing configuration metadata and shared defaults. 4 | /// 5 | /// The shared instance of Store is available throughout the app with: 6 | /// 7 | /// ``@EnvironmentObject var store: Store`` 8 | open class Store: SceneManager { 9 | /// The module bundle for this store, used for looking up embedded resources 10 | public static let bundle = Bundle.module 11 | 12 | /// The configuration metadata for the app from the `App.yml` file. 13 | public static let config: JSON = try! configuration(name: "App") 14 | 15 | /// App-wide preference using ``SwiftUI/AppStorage``. 16 | @AppStorage("togglePreference") public var togglePreference = false 17 | 18 | /// App-wide preference using ``SwiftUI/AppStorage``. 19 | @AppStorage("numberPreference") public var numberPreference = 0.0 20 | 21 | public required init() { 22 | } 23 | 24 | /// AppFacets describes the top-level app, expressed as tabs on a mobile device and outline items on desktops. 25 | public enum AppFacets : String, FacetView, CaseIterable { 26 | /// The initial facet, which typically shows a welcome / onboarding experience 27 | case welcome 28 | /// The main content of the app. 29 | case content 30 | /// The setting for the app, which contains app-specific preferences as well as other standard settings 31 | case settings 32 | 33 | public var facetInfo: FacetInfo { 34 | switch self { 35 | case .welcome: 36 | return FacetInfo(title: Text("Welcome", bundle: .module, comment: "tab title for top-level “Welcome” facet"), symbol: "house", tint: nil) 37 | case .content: 38 | return FacetInfo(title: Text("Content", bundle: .module, comment: "tab title for top-level “Content” facet"), symbol: "puzzlepiece", tint: nil) 39 | case .settings: 40 | return FacetInfo(title: Text("Settings", bundle: .module, comment: "tab title for top-level “Settings” facet"), symbol: "gearshape", tint: nil) 41 | } 42 | } 43 | 44 | @ViewBuilder public func facetView(for store: Store) -> some View { 45 | switch self { 46 | case .welcome: WelcomeView() 47 | case .content: ContentView() 48 | case .settings: SettingsView() 49 | } 50 | } 51 | } 52 | 53 | /// A ``Facets`` that describes the app's configuration settings. 54 | /// 55 | /// Adding `WithStandardSettings` to the type will add standard configuration facets like "Appearance", "Language", and "Support" 56 | public typealias ConfigFacets = StoreSettings.WithStandardSettings 57 | 58 | /// A ``Facets`` that describes the app's preferences sections. 59 | public enum StoreSettings : String, FacetView, CaseIterable { 60 | /// The main preferences for the app 61 | case preferences 62 | 63 | public var facetInfo: FacetInfo { 64 | switch self { 65 | case .preferences: 66 | return FacetInfo(title: Text("Preferences", bundle: .module, comment: "preferences title"), symbol: "gearshape", tint: nil) 67 | } 68 | } 69 | 70 | @ViewBuilder public func facetView(for store: Store) -> some View { 71 | switch self { 72 | case .preferences: PreferencesView() 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /Sources/App/WelcomeView.swift: -------------------------------------------------------------------------------- 1 | import FairApp 2 | 3 | /// A welcome view that cycles through a grid of introductory "cards" using a ``CardBoard``. 4 | /// 5 | /// You should update the contents of the cards to describe the purpose and usage of your app. 6 | /// 7 | /// The card markdown fields are defined in the `Localizable.strings` files for each supported language, 8 | /// and links are provided to these files from within the app to facilitate the contribution of translations. 9 | struct WelcomeView : View { 10 | @EnvironmentObject var store: Store 11 | @Environment(\.locale) var locale 12 | @State var selectedCard: Card.ID? 13 | 14 | var body: some View { 15 | // a flexible board of welcome cards, providing the introduction and onboarding experience for the app 16 | CardBoard(selection: $selectedCard, selectedMode: .monochrome, unselectedMode: .hierarchical, selectedVariants: .circle, unselectedVariants: .fill.circle, cards: Self.localizedCards) 17 | .autocycle() // expand each card after a delay 18 | } 19 | 20 | /// 21 | private static var cardColors = ([.accentColor] + CodableColor.nominalColors).makeIterator() 22 | 23 | /// The card defintions for the welcome screen. 24 | /// 25 | /// Each card contains a system symbol name as well a title, subtitle, and body markdown. 26 | /// You are expected to add cards to describe the purpose and usage of your particular app. 27 | /// 28 | /// Internationalization is supported by updating the corresponding localization keys in the various 29 | /// `Localizable.strings` files (e.g., `Sources/App/Resources/fr.lproj/Localizable.strings`). 30 | /// Links are provided to the source repository for these files from within the app to facilitate the contribution of translations. 31 | /// These translation files must be kept up to date with your source code, which can be done manually or using `genstrings`. 32 | /// Alternatively, an app localization refresh can be done with `fairtool app localize` or the corresponding build plug-in. 33 | static let localizedCards = [ 34 | card("checkmark", color: cardColors.next(), 35 | title: Locale.appName(), 36 | subtitle: Locale.appSubtitle(), 37 | body: Locale.appSummary()), 38 | card("hammer", color: cardColors.next(), 39 | title: NSLocalizedString("welcome-02-banner", bundle: .module, value: "Get Started", comment: "app intro card #2 banner markdown"), 40 | subtitle: NSLocalizedString("welcome-02-caption", bundle: .module, value: "Start developing your app.", comment: "app intro card #2 caption markdown"), 41 | body: NSLocalizedString("welcome-02-content", bundle: .module, value: "My app is my best friend. It is my life. I must master it as I must master my life.", comment: "app intro card #2 content markdown")), 42 | card("flag", color: cardColors.next(), 43 | title: NSLocalizedString("welcome-03-banner", bundle: .module, value: "Internationalize", comment: "app intro card #3 banner markdown"), 44 | subtitle: NSLocalizedString("welcome-03-caption", bundle: .module, value: "Bring your app to the World", comment: "app intro card #3 caption markdown"), 45 | body: NSLocalizedString("welcome-03-content", bundle: .module, value: "App Fair apps are global, with support for multiple languages and locales.", comment: "app intro card #3 content markdown")), 46 | ] 47 | .compactMap({ $0 }) 48 | 49 | /// Loads the localized card string for the current locale. 50 | private static func card(_ symbolName: String, color: CodableColor? = nil, title: String, subtitle: String, body: String) -> Card? { 51 | func checkLocalized(_ value: String) -> String? { 52 | // only show cards that have a localization set in the Localized.strings file 53 | if value.hasPrefix("welcome-") { return nil } 54 | return value 55 | } 56 | guard let title = checkLocalized(title) else { 57 | return nil 58 | } 59 | 60 | return Card(title: title, subtitle: checkLocalized(subtitle), body: checkLocalized(body), background: [color].compacted(), flair: symbolName) 61 | } 62 | } 63 | 64 | -------------------------------------------------------------------------------- /Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- 1 | /** 2 | This program is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU Affero General Public License as 4 | published by the Free Software Foundation, either version 3 of the 5 | License, or (at your option) any later version. 6 | 7 | This program is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU Affero General Public License for more details. 11 | 12 | You should have received a copy of the GNU Affero General Public License 13 | along with this program. If not, see . 14 | */ 15 | import Swift 16 | import XCTest 17 | import App 18 | import FairApp 19 | import SwiftUI 20 | 21 | open class AppTests: XCTestCase { 22 | @MainActor open func testAppManager() throws { 23 | let store = AppContainer.AppManager() 24 | XCTAssertEqual(store.togglePreference, false) 25 | XCTAssertEqual(store.numberPreference, 0.0) 26 | 27 | let cfg = AppContainer.AppManager.config 28 | XCTAssertEqual("appfair/fairapp-theme", cfg["remote_theme"]) 29 | } 30 | 31 | /// Creates screenshots for this app by iterating through all the facets, locales, and supported devices. 32 | /// When run in test cases with the default parameters, the generated screenshots will be included 33 | /// as metadata for the app submission. 34 | @MainActor open func testScreenshots() throws { 35 | _ = try Store().captureFacetScreens() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /appfair.xcconfig: -------------------------------------------------------------------------------- 1 | // The configuration file for your App Fair App. See: https://www.appfair.net 2 | 3 | // PRODUCT_NAME is the app name, consisting of two words separated by a space 4 | PRODUCT_NAME = App Name 5 | 6 | // PRODUCT_BUNDLE_IDENTIFIER must be in the form: "app.App-Name" 7 | PRODUCT_BUNDLE_IDENTIFIER = app.App-Name 8 | 9 | // The semantic version for the app matching the git tag for the release 10 | MARKETING_VERSION = 0.0.1 11 | 12 | // The monotonically increasing number specifying the internal app version 13 | CURRENT_PROJECT_VERSION = 1 14 | 15 | // The category of the app should be one of: public.app-category.business, developer-tools, education, entertainment, finance, games, graphics-design, healthcare-fitness, lifestyle, medical, music, news, photography, productivity, reference, social-networking, sports, travel, utilities, video, weather 16 | APP_CATEGORY = public.app-category.utilities 17 | 18 | // Specify which platforms to build and release 19 | // SUPPORTED_PLATFORMS = macosx 20 | // SUPPORTED_PLATFORMS = iphoneos iphonesimulator 21 | // SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator android 22 | SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator 23 | 24 | // Catalyst settings for iOS apps on macOS 25 | // SUPPORTS_MACCATALYST = YES 26 | // SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO 27 | 28 | // On-device testing may need to override the bundle ID 29 | // PRODUCT_BUNDLE_IDENTIFIER[config=Debug][sdk=iphoneos*] = myorg.app.App-Name 30 | 31 | // FRAMEWORK_SEARCH_PATHS = $(inherited) $(PROJECT_DIR) 32 | // ONLY_ACTIVE_ARCH[config=Debug][sdk=*][arch=*] = YES 33 | 34 | // Development team ID for on-device and catalyst testing 35 | // DEVELOPMENT_TEAM = 36 | 37 | IPHONEOS_DEPLOYMENT_TARGET = 16.0 38 | MACOSX_DEPLOYMENT_TARGET = 13.0 39 | 40 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | ../App.yml -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: fairapp 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /docs/screenshots/README: -------------------------------------------------------------------------------- 1 | PNG files placed in this folder will be used as the App Fair preview screenshots. 2 | 3 | The files should be named according to one of the following pattern: 4 | 5 | `screenshot_ID-PLATFORM-WIDTHxHEIGHT.png` 6 | `screenshot_ID-PLATFORM-MODE-WIDTHxHEIGHT.png` 7 | `screenshot_ID-PLATFORM-MODE-WIDTHxHEIGHT@SCALEx.png` 8 | 9 | Where `PLATFORM` is `mac`, `iphone`, or `ipad`. 10 | 11 | 12 | For example: 13 | 14 | * screenshot_01-mac-dark-1024x768@1x.png 15 | * screenshot_01-mac-light-1024x768@1x.png 16 | * screenshot_02-iphone-dark-1284x2778.png 17 | * screenshot_03-iphone-dark-2778x1284.png 18 | * screenshot_04-ipad-dark-2224x1668.png 19 | * screenshot_04-ipad-light-2224x1668.png 20 | 21 | -------------------------------------------------------------------------------- /project.xcodeproj/xcshareddata/xcschemes/AppFairApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /sandbox-ios.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /sandbox-macos.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.apple.security.files.user-selected.read-write 7 | 8 | 9 | 10 | com.apple.security.network.client 11 | 12 | 13 | 14 | com.apple.security.app-sandbox 15 | 16 | 17 | 18 | com.apple.security.cs.allow-jit 19 | 20 | 21 | 22 | com.apple.security.cs.disable-library-validation 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /xcode.swift: -------------------------------------------------------------------------------- 1 | import App 2 | import Foundation 3 | 4 | /// 5 | /// **DO NOT MODIFY** 6 | /// 7 | /// This is the entry point for the app, which is defined in App.AppContainer. 8 | /// It is the **only** code that may be included in the Xcode `project.xcodeproj`, 9 | /// and it must remain unmodified on order to the app to be eligable for App Fair distribution. 10 | @available(macOS 12.0, iOS 15.0, *) 11 | @main public enum App { 12 | public static func main() async throws { 13 | try await AppContainer.main() 14 | } 15 | } 16 | --------------------------------------------------------------------------------