# Amazon Vega PUFF-J

> Localize Amazon Vega & Fire TV PUFF-J resource files

URL: https://store.crowdin.com/amazon-vega-puff-j
Identifier: amazon-vega-puff-j
Category: File Formats
Type: App
Author: Awesome Crowdin

Adds support for the Amazon Vega PUFF-J format (*.puff.json) to Crowdin. Select your projects at install time, then upload files and download translations. No other configuration. Covers ICU placeholders, per-language plural forms, select and gender branches, and nested messages.

## File Format Details

| Attribute | Value |
| --------- | ----- |
| File Extension | .puff.json |
| [API Type](https://developer.crowdin.com/api/v2/#operation/api.projects.files.post) | amazon-vega-puff-j |
| Source can be edited in Crowdin | No |
| Generating translated files via [Bundles](https://support.crowdin.com/bundles/) | [Search Crowdin Store](https://store.crowdin.com/tags/string-exporter) |
| Supports pluralization | Yes |
| WYSIWYG Preview in the editor | No |
| Supported types of contextual information | Text comments, Screenshots |
| Custom attributes | No |
| Existing translations import possibility | Key-value mapping |

## Sample File

```csv
{
  "dir": "ltr",
  "resources": {
    "app-name": "Vega Streaming",
    "home-greeting": {
      "note": "Home screen, after sign-in. {username} is the profile name, {lastWatched} is a date.",
      "value": "Welcome back, {username}! You last watched something on {lastWatched,date,medium}."
    },
    "detail-episode-count": {
      "note": "Episode count on a series detail page. {episodeCount} is the number of episodes.",
      "value": {
        "param": "episodeCount",
        "pluralItems": {
          "=0": "No episodes available yet",
          "one": "{episodeCount,number,integer} episode available",
          "other": "{episodeCount,number,integer} episodes available"
        }
      }
    },
    "downloads-in-progress": {
      "note": "Downloads screen header. Parameter 0 is the number of downloads still running.",
      "value": {
        "param": 0,
        "pluralItems": {
          "one": "{0,number,integer} download in progress",
          "other": "{0,number,integer} downloads in progress"
        }
      }
    },
    "watchparty-invite": {
      "note": "{hostName} is the name of the host, {hostGender} is the host's grammatical gender.",
      "value": {
        "param": "hostGender",
        "selectItems": {
          "female": "{hostName} invites you to her watch party.",
          "male": "{hostName} invites you to his watch party.",
          "other": "{hostName} invites you to their watch party."
        }
      }
    },
    "watchparty-guest-summary": {
      "note": "{guestCount} is the number of guests, {hostGender} is the host's grammatical gender.",
      "value": {
        "param": "guestCount",
        "pluralItems": {
          "one": {
            "param": "hostGender",
            "selectItems": {
              "female": "{hostName} invited one guest to her watch party.",
              "male": "{hostName} invited one guest to his watch party.",
              "other": "{hostName} invited one guest to their watch party."
            }
          },
          "other": {
            "param": "hostGender",
            "selectItems": {
              "female": "{hostName} invited {guestCount,number,integer} guests to her watch party.",
              "male": "{hostName} invited {guestCount,number,integer} guests to his watch party.",
              "other": "{hostName} invited {guestCount,number,integer} guests to their watch party."
            }
          }
        }
      }
    },
    "settings-legal-notice": {
      "note": "Settings screen. Second line must render the braces around username literally.",
      "value": "By continuing you accept the Terms of Use.\nType '{'username'}' to insert your profile name."
    },
    "build:app-version": {
      "note": "App version rendered verbatim in Settings.",
      "translate": false,
      "value": "1.4.2"
    }
  }
}

```
