diff --git a/.eslintrc.js b/.eslintrc.js index 031c2320..6c8198a3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -102,5 +102,7 @@ module.exports = { "/dependencies", // Ignore tests "/test", + // Ignore i18n + "/i18n", ], }; \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 782d6e19..9d091988 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,9 @@ jobs: # See https://github.com/yarnpkg/yarn/issues/7212 run: yarn install --cache-folder ./.yarncache working-directory: simulator + - name: Build i18n + run: yarn run build-i18n + working-directory: simulator - name: Build production bundle run: yarn build working-directory: simulator diff --git a/Dockerfile b/Dockerfile index 8e2765e0..eb3c27b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,5 +21,6 @@ EXPOSE 3000 # WORKDIR /app/simulator # RUN yarn install --cache-folder ./.yarncache && yarn build; true RUN yarn install --cache-folder ./.yarncache +RUN yarn run build-i18n RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build CMD node express.js diff --git a/README.md b/README.md index 7415858b..e8466027 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,11 @@ Navigate to the root directory of this repository, then run: yarn install ``` +## Build Translations +```bash +yarn run build-i18n +``` + # Running In one terminal, build in watch mode: @@ -119,6 +124,29 @@ The project is set up with [ESLint](https://eslint.org/) for JavaScript/TypeScri To ease development, we highly recommend enabling ESLint within your editor so you can see issues in real time. If you're using Visual Studio Code, you can use the [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint). For other editors, see [available ESLint integrations](https://eslint.org/docs/user-guide/integrations). +## Internationalization (i18n) + +Simulator leverages gettext PO files to create a `i18n.json` file located in `/i18n/i18n.json`. The source files are scanned for imports of `@i18n`, and uses of the default exported function (`tr` by convention) are detected and inserted into PO files located in `/i18n/po/`. These PO files are "built" into the JSON file, which is then injected into the frontend via webpack's `DefinePlugin` (see `configs/webpack/common.js` for details). The `tr` function reads this object at runtime to make translations available. + +To update the PO files, run `yarn run generate-i18n`. While the generation script *should* preserve your work-in-progress, it is recommended to commit, stash, or otherwise backup the PO files prior to running this script. + +To build the PO files into a JSON object suitable for consumption by the frontend, run `yarn run build-i18n`. + +There are many editors available for PO files. We recommend [Poedit](https://poedit.net/). + +The format of the `i18n.json` is as follows: +```json +{ + "context1": { + "See `src/util/LocalizedString.ts` for a list of available language identifiers": { + "en-US": "See `src/util/LocalizedString.ts` for a list of available language identifiers", + "ja-JP": "利用可能な言語識別子のリストについては、「src/util/LocalizedString.ts」を参照してください" + } + }, + "..." +} +``` + # Building image The repo includes a `Dockerfile` for building a Docker image of the simulator: diff --git a/configs/webpack/common.js b/configs/webpack/common.js index 668cc45c..7223a326 100644 --- a/configs/webpack/common.js +++ b/configs/webpack/common.js @@ -4,6 +4,7 @@ const { readFileSync } = require('fs'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const NpmDtsPlugin = require('npm-dts-webpack-plugin') const { DefinePlugin, IgnorePlugin } = require('webpack'); +const process = require('process'); const commitHash = require('child_process').execSync('git rev-parse --short=8 HEAD').toString().trim(); @@ -23,6 +24,15 @@ if (dependencies.libkipr_c_documentation) { libkiprCDocumentation = JSON.parse(readFileSync(resolve(dependencies.libkipr_c_documentation))); } +let i18n = {}; +try { + i18n = JSON.parse(readFileSync(resolve(__dirname, '..', '..', 'i18n', 'i18n.json'))); +} catch (e) { + console.log('Failed to read i18n.json'); + console.log(`Please run 'yarn run build-i18n'`); + process.exit(1); +} + module.exports = { entry: { @@ -53,6 +63,9 @@ module.exports = { fs: false, path: false, }, + alias: { + '@i18n': resolve(__dirname, '../../src/i18n'), + }, symlinks: false, modules }, @@ -131,6 +144,7 @@ module.exports = { SIMULATOR_HAS_CPYTHON: JSON.stringify(dependencies.cpython !== undefined), SIMULATOR_HAS_AMMO: JSON.stringify(dependencies.ammo !== undefined), SIMULATOR_LIBKIPR_C_DOCUMENTATION: JSON.stringify(libkiprCDocumentation), + SIMULATOR_I18N: JSON.stringify(i18n), }), new NpmDtsPlugin({ root: resolve(__dirname, '../../'), diff --git a/i18n/.gitignore b/i18n/.gitignore new file mode 100644 index 00000000..1dfe4721 --- /dev/null +++ b/i18n/.gitignore @@ -0,0 +1 @@ +i18n.json \ No newline at end of file diff --git a/i18n/build.ts b/i18n/build.ts new file mode 100644 index 00000000..65a837bf --- /dev/null +++ b/i18n/build.ts @@ -0,0 +1,34 @@ +import * as gettextParser from 'gettext-parser'; +import * as fs from 'fs'; +import * as path from 'path'; +import { walkDir } from './util'; +import { PO_PATH } from './po'; +import { I18n } from '../src/i18n'; +import LocalizedString from '../src/util/LocalizedString'; + + +const ret: I18n = {}; + +walkDir(PO_PATH, file => { + if (!file.endsWith('.po')) return; + + const po = gettextParser.po.parse(fs.readFileSync(file, 'utf8')); + const lang = path.basename(file, '.po'); + for (const context in po.translations) { + if (!ret[context]) ret[context] = {}; + + const contextTranslations = po.translations[context]; + for (const enUs in contextTranslations) { + if (enUs.length === 0) continue; + const translation = contextTranslations[enUs]; + if (translation.msgstr[0].length === 0 && lang !== LocalizedString.EN_US) continue; + ret[context][enUs] = { + ...ret[context][enUs] || {}, + [lang]: translation.msgstr[0], + [LocalizedString.EN_US]: enUs, + }; + } + } +}); + +fs.writeFileSync(path.resolve(__dirname, 'i18n.json'), JSON.stringify(ret, null, 2)); \ No newline at end of file diff --git a/i18n/generate.ts b/i18n/generate.ts new file mode 100644 index 00000000..9bed42b7 --- /dev/null +++ b/i18n/generate.ts @@ -0,0 +1,109 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as typescript from 'typescript'; +import * as gettextParser from 'gettext-parser'; +import LocalizedString from '../src/util/LocalizedString'; +import { DEFAULT_PO, PO_PATH } from './po'; +import { walkDir } from './util'; + +const tsConfigPath = path.resolve(__dirname, '..', 'tsconfig.json'); +const tsConfig = typescript.readConfigFile(tsConfigPath, (path) => fs.readFileSync(path, 'utf8')); + +const compilerOptions = tsConfig.config.compilerOptions as typescript.CompilerOptions; + +// TypeScript complains about moduleResolution being "node". +// We don't need it, so we can just delete it. +delete compilerOptions.moduleResolution; + +const rootNames = []; + +walkDir(path.resolve(__dirname, '..', 'src'), file => { + if (file.endsWith('.tsx') || file.endsWith('.ts')) rootNames.push(file); +}); + +const program = typescript.createProgram({ + rootNames: rootNames, + options: compilerOptions, +}); + +const sourceFiles = program.getSourceFiles(); + +interface Tr { + enUs: string; + description?: string; +} + +const findTrs = (funcName: string, sourceFile: typescript.SourceFile, node: typescript.Node) => { + let ret: Tr[] = []; + + if (typescript.isCallExpression(node)) { + const expression = node.expression; + if (typescript.isIdentifier(expression)) { + if (expression.text === funcName) { + const enUs = node.arguments[0]; + if (typescript.isStringLiteral(enUs)) { + const description = node.arguments[1]; + if (description !== undefined && typescript.isStringLiteral(description)) { + ret.push({ enUs: enUs.text, description: description.text }); + } else { + ret.push({ enUs: enUs.text }); + } + } + } + } + } + + const children = node.getChildren(sourceFile); + for (const child of children) ret = [...ret, ...findTrs(funcName, sourceFile, child)]; + return ret; +}; + + + +const trDict: { [locale in LocalizedString.Language]?: gettextParser.GetTextTranslations } = {}; + +// Load existing PO files + + +for (const language of LocalizedString.SUPPORTED_LANGUAGES) { + const poPath = path.resolve(PO_PATH, `${language}.po`); + if (!fs.existsSync(poPath)) continue; + if (language === LocalizedString.AR_SA) console.log(fs.readFileSync(poPath, 'utf8')); + const po = gettextParser.po.parse(fs.readFileSync(poPath, 'utf8')); + trDict[language] = po; + if (language === LocalizedString.AR_SA) console.log(`Loaded ${language}.po`, JSON.stringify(po, null, 2)); +} + +for (const sourceFile of sourceFiles) { + const trs = findTrs('tr', sourceFile, sourceFile); + for (const language of LocalizedString.SUPPORTED_LANGUAGES) { + const po: gettextParser.GetTextTranslations = trDict[language] || DEFAULT_PO; + trDict[language] = po; + for (const tr of trs) { + const { enUs, description } = tr; + + const context = description || ''; + if (!po.translations) po.translations = {}; + if (!po.translations[context]) po.translations[context] = {}; + const translation = po.translations[context][enUs]; + if (translation) continue; + + if (context.length > 0) console.log(`Adding ${language} translation for "${enUs}" (context: "${context}")`); + + po.translations[context][enUs] = { + msgid: enUs, + msgctxt: context, + msgstr: [''], + }; + + } + } +} + +// Write the PO files +for (const language of LocalizedString.SUPPORTED_LANGUAGES) { + const poPath = path.resolve(PO_PATH, `${language}.po`); + const po = trDict[language]; + if (!po) continue; + fs.writeFileSync(poPath, gettextParser.po.compile(po), 'utf8'); +} \ No newline at end of file diff --git a/i18n/po.ts b/i18n/po.ts new file mode 100644 index 00000000..83118555 --- /dev/null +++ b/i18n/po.ts @@ -0,0 +1,10 @@ +import * as path from 'path'; +import * as gettextParser from 'gettext-parser'; + +export const PO_PATH = path.resolve(__dirname, 'po'); + +export const DEFAULT_PO: gettextParser.GetTextTranslations = { + charset: 'utf-8', + headers: {}, + translations: {} +}; \ No newline at end of file diff --git a/i18n/po/ar-SA.po b/i18n/po/ar-SA.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ar-SA.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/bg-BG.po b/i18n/po/bg-BG.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/bg-BG.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/cs-CZ.po b/i18n/po/cs-CZ.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/cs-CZ.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/da-DK.po b/i18n/po/da-DK.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/da-DK.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/de-DE.po b/i18n/po/de-DE.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/de-DE.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/el-GR.po b/i18n/po/el-GR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/el-GR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/en-UK.po b/i18n/po/en-UK.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/en-UK.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/en-US.po b/i18n/po/en-US.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/en-US.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/es-ES.po b/i18n/po/es-ES.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/es-ES.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/es-MX.po b/i18n/po/es-MX.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/es-MX.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/fa-IR.po b/i18n/po/fa-IR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/fa-IR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/fi-FI.po b/i18n/po/fi-FI.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/fi-FI.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/fr-FR.po b/i18n/po/fr-FR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/fr-FR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/he-IL.po b/i18n/po/he-IL.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/he-IL.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/hi-IN.po b/i18n/po/hi-IN.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/hi-IN.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/hu-HU.po b/i18n/po/hu-HU.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/hu-HU.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/id-ID.po b/i18n/po/id-ID.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/id-ID.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/it-IT.po b/i18n/po/it-IT.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/it-IT.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ja-JP.po b/i18n/po/ja-JP.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ja-JP.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ko-KR.po b/i18n/po/ko-KR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ko-KR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ms-MY.po b/i18n/po/ms-MY.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ms-MY.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/nl-NL.po b/i18n/po/nl-NL.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/nl-NL.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/no-NO.po b/i18n/po/no-NO.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/no-NO.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/pl-PL.po b/i18n/po/pl-PL.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/pl-PL.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/pt-BR.po b/i18n/po/pt-BR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/pt-BR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/pt-PT.po b/i18n/po/pt-PT.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/pt-PT.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ro-RO.po b/i18n/po/ro-RO.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ro-RO.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ru-RU.po b/i18n/po/ru-RU.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ru-RU.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/sk-SK.po b/i18n/po/sk-SK.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/sk-SK.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/sv-SE.po b/i18n/po/sv-SE.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/sv-SE.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/th-TH.po b/i18n/po/th-TH.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/th-TH.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/tr-TR.po b/i18n/po/tr-TR.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/tr-TR.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/ur-PK.po b/i18n/po/ur-PK.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/ur-PK.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/vi-VN.po b/i18n/po/vi-VN.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/vi-VN.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/zh-CN.po b/i18n/po/zh-CN.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/zh-CN.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/po/zh-TW.po b/i18n/po/zh-TW.po new file mode 100644 index 00000000..63e2ec7d --- /dev/null +++ b/i18n/po/zh-TW.po @@ -0,0 +1,1081 @@ +msgid "" +msgstr "Content-Type: text/plain\n" + +msgid "Robot" +msgstr "" + +msgid "Base Scene - Surface A" +msgstr "" + +msgid "" +"A base scene using Surface A. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface A" +msgstr "" + +msgid "Ground" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Base Scene - Surface B" +msgstr "" + +msgid "" +"A base scene using Surface B. Intended to be augmented to create full JBC " +"scenes" +msgstr "" + +msgid "JBC Surface B" +msgstr "" + +msgid "Can %s" +msgstr "" + +msgid "JBC Sandbox A" +msgstr "" + +msgid "" +"Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by " +"default." +msgstr "" + +msgid "Paper Ream 1" +msgstr "" + +msgid "Paper Ream 2" +msgstr "" + +msgid "JBC Sandbox B" +msgstr "" + +msgid "Junior Botball Challenge Sandbox on Mat B." +msgstr "" + +msgid "JBC 1" +msgstr "" + +msgid "Junior Botball Challenge 1: Tag, You're It!" +msgstr "" + +msgid "JBC 2" +msgstr "" + +msgid "Junior Botball Challenge 2: Ring Around the Can" +msgstr "" + +msgid "JBC 2B" +msgstr "" + +msgid "Junior Botball Challenge 2B: Ring Around the Can, Sr." +msgstr "" + +msgid "JBC 2C" +msgstr "" + +msgid "Junior Botball Challenge 2C: Back It Up" +msgstr "" + +msgid "JBC 2D" +msgstr "" + +msgid "Junior Botball Challenge 2D: Ring Around the Can and Back It Up" +msgstr "" + +msgid "JBC 3" +msgstr "" + +msgid "Junior Botball Challenge 3: Precision Parking" +msgstr "" + +msgid "JBC 3B" +msgstr "" + +msgid "Junior Botball Challenge 3B: Parallel Parking" +msgstr "" + +msgid "JBC 3C" +msgstr "" + +msgid "Junior Botball Challenge 3C: Quick Get Away!" +msgstr "" + +msgid "JBC 4" +msgstr "" + +msgid "Junior Botball Challenge 4: Figure Eight" +msgstr "" + +msgid "JBC 4B" +msgstr "" + +msgid "Junior Botball Challenge 4B: Barrel Racing" +msgstr "" + +msgid "JBC 5" +msgstr "" + +msgid "Junior Botball Challenge 5: Dance Party" +msgstr "" + +msgid "JBC 5B" +msgstr "" + +msgid "Junior Botball Challenge 5B: Line Dance" +msgstr "" + +msgid "JBC 5C" +msgstr "" + +msgid "Junior Botball Challenge 5C: Synchronized Dancing" +msgstr "" + +msgid "JBC 6" +msgstr "" + +msgid "Junior Botball Challenge 6: Load 'Em Up" +msgstr "" + +msgid "JBC 6B" +msgstr "" + +msgid "Junior Botball Challenge 6B: Pick 'Em Up" +msgstr "" + +msgid "JBC 6C" +msgstr "" + +msgid "Junior Botball Challenge 6C: Empty the Garage" +msgstr "" + +msgid "Circle 2" +msgstr "" + +msgid "Circle 9" +msgstr "" + +msgid "Circle 10" +msgstr "" + +msgid "Mat Surface" +msgstr "" + +msgid "JBC 7" +msgstr "" + +msgid "Junior Botball Challenge 7: Bulldozer Mania" +msgstr "" + +msgid "JBC 7B" +msgstr "" + +msgid "Junior Botball Challenge 7B: Cover Your Bases" +msgstr "" + +msgid "JBC 8" +msgstr "" + +msgid "Junior Botball Challenge 8: Serpentine" +msgstr "" + +msgid "JBC 8B" +msgstr "" + +msgid "Junior Botball Challenge 8B: Serpentine Jr." +msgstr "" + +msgid "JBC 9" +msgstr "" + +msgid "Junior Botball Challenge 9: Add It Up" +msgstr "" + +msgid "JBC 9B" +msgstr "" + +msgid "Junior Botball Challenge 9B: Balancing Act" +msgstr "" + +msgid "JBC 10" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust" +msgstr "" + +msgid "JBC 10B" +msgstr "" + +msgid "Junior Botball Challenge 10: Solo Joust Jr." +msgstr "" + +msgid "JBC 12" +msgstr "" + +msgid "Junior Botball Challenge 12: Unload 'Em" +msgstr "" + +msgid "JBC 13" +msgstr "" + +msgid "Junior Botball Challenge 13: Clean the Mat" +msgstr "" + +msgid "JBC 15B" +msgstr "" + +msgid "Junior Botball Challenge 15B: Bump Bump" +msgstr "" + +msgid "JBC 17" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line" +msgstr "" + +msgid "JBC 17B" +msgstr "" + +msgid "Junior Botball Challenge 17: Walk the Line II" +msgstr "" + +msgid "JBC 19" +msgstr "" + +msgid "Junior Botball Challenge 19: Mountain Rescue" +msgstr "" + +msgid "Paper Ream" +msgstr "" + +msgid "JBC 20" +msgstr "" + +msgid "Junior Botball Challenge 20: Rescue the Cans" +msgstr "" + +msgid "JBC 21" +msgstr "" + +msgid "Junior Botball Challenge 21: Foot Tall" +msgstr "" + +msgid "JBC 22" +msgstr "" + +msgid "Junior Botball Challenge 22: Stackerz" +msgstr "" + +msgid "Script Playground" +msgstr "" + +msgid "Script tests" +msgstr "" + +msgid "Demobot" +msgstr "" + +msgid "JBC Challenge 6C" +msgstr "" + +msgid "Can A Lifted" +msgstr "" + +msgid "Can A picked up" +msgstr "" + +msgid "Can B Lifted" +msgstr "" + +msgid "Can B picked up" +msgstr "" + +msgid "Can C Lifted" +msgstr "" + +msgid "Can C picked up" +msgstr "" + +msgid "Can A Placed" +msgstr "" + +msgid "Can A placed on circle 2" +msgstr "" + +msgid "Can B Placed" +msgstr "" + +msgid "Can A placed on circle 9" +msgstr "" + +msgid "Can C Placed" +msgstr "" + +msgid "Can A placed on circle 10" +msgstr "" + +msgid "Can A Upright" +msgstr "" + +msgid "Can A upright on circle 2" +msgstr "" + +msgid "Can B Upright" +msgstr "" + +msgid "Can B upright on circle 9" +msgstr "" + +msgid "Can C Upright" +msgstr "" + +msgid "Can C upright on circle 10" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Tutorials" +msgstr "" + +msgid "Learn how to get started with the simulator" +msgstr "" + +msgid "3D Simulator" +msgstr "" + +msgid "A simulator for the Botball demobot." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"KIPR is a 501(c) 3 organization started to make the long-term educational " +"benefits of robotics accessible to students." +msgstr "" + +msgid "Quick Start" +msgstr "" + +msgid "Navigating in 3D" +msgstr "" + +msgid "Learn the controls for navigating in 3D in the simulator" +msgstr "" + +msgid "Robot Section" +msgstr "" + +msgid "How to use the robot section" +msgstr "" + +msgid "World Section" +msgstr "" + +msgid "Learn how to create and manipulate items and scene in the simulator" +msgstr "" + +msgid "Indent" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Error(s)" +msgstr "" + +msgid "Warning(s)" +msgstr "" + +msgid "grams" +msgstr "" + +msgid "kilograms" +msgstr "" + +msgid "pounds" +msgstr "" + +msgid "ounces" +msgstr "" + +msgid "meters" +msgstr "" + +msgid "centimeters" +msgstr "" + +msgid "feet" +msgstr "" + +msgid "inches" +msgstr "" + +msgid "radians" +msgstr "" + +msgid "degrees" +msgstr "" + +msgid "Can" +msgstr "" + +msgid "Box" +msgstr "" + +msgid "Sphere" +msgstr "" + +msgid "Cylinder" +msgstr "" + +msgid "Cone" +msgstr "" + +msgid "Plane" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Euler" +msgstr "" + +msgid "Axis Angle" +msgstr "" + +msgid "Empty" +msgstr "" + +msgid "Standard Object" +msgstr "" + +msgid "Custom Object" +msgstr "" + +msgid "Point Light" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "Texture" +msgstr "" + +msgid "Value" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Geometry" +msgstr "" + +msgid "Item" +msgstr "" + +msgid "Box Options" +msgstr "" + +msgid "Size X" +msgstr "" + +msgid "Size Y" +msgstr "" + +msgid "Size Z" +msgstr "" + +msgid "Sphere Options" +msgstr "" + +msgid "Radius" +msgstr "" + +msgid "Cylinder Options" +msgstr "" + +msgid "Height" +msgstr "" + +msgid "Plane Options" +msgstr "" + +msgid "File Options" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "Material" +msgstr "" + +msgid "Color Type" +msgstr "" + +msgid "Color Red" +msgstr "" + +msgid "Color Green" +msgstr "" + +msgid "Color Blue" +msgstr "" + +msgid "Color Texture URI" +msgstr "" + +msgid "Albedo Type" +msgstr "" + +msgid "Albedo Red" +msgstr "" + +msgid "Albedo Green" +msgstr "" + +msgid "Albedo Blue" +msgstr "" + +msgid "Albedo Texture URI" +msgstr "" + +msgid "Reflection Type" +msgstr "" + +msgid "Reflection Red" +msgstr "" + +msgid "Reflection Green" +msgstr "" + +msgid "Reflection Blue" +msgstr "" + +msgid "Reflection Texture URI" +msgstr "" + +msgid "Emissive Type" +msgstr "" + +msgid "Emissive Red" +msgstr "" + +msgid "Emissive Green" +msgstr "" + +msgid "Emissive Blue" +msgstr "" + +msgid "Emissive Texture URI" +msgstr "" + +msgid "Ambient Type" +msgstr "" + +msgid "Ambient Red" +msgstr "" + +msgid "Ambient Green" +msgstr "" + +msgid "Ambient Blue" +msgstr "" + +msgid "Ambient Texture URI" +msgstr "" + +msgid "Metalness Type" +msgstr "" + +msgid "Metalness" +msgstr "" + +msgid "Metalness Texture URI" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "Order" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "Scale" +msgstr "" + +msgid "Physics" +msgstr "" + +msgid "Mass" +msgstr "" + +msgid "Friction" +msgstr "" + +msgid "Unnamed Object" +msgstr "" + +msgid "Add Item" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Add Script" +msgstr "" + +msgid "Select Scene" +msgstr "" + +msgid "Save Scene" +msgstr "" + +msgid "Copy Scene" +msgstr "" + +msgid "Item(s) (%d)" +msgstr "" + +msgid "Script(s) (%d)" +msgstr "" + +msgid "Layouts" +msgstr "" + +msgid "Overlay" +msgstr "" + +msgid "Side" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "Hide All" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Rotation" +msgstr "" + +msgid "Start Location" +msgstr "" + +msgid "Motor Velocity Plot" +msgstr "" + +msgid "Motor Position Plot" +msgstr "" + +msgid "Analog Sensor Plot" +msgstr "" + +msgid "Digital Sensor Plot" +msgstr "" + +msgid "Analog Sensors" +msgstr "" + +msgid "Digital Sensors" +msgstr "" + +msgid "Servos" +msgstr "" + +msgid "Motor Velocities" +msgstr "" + +msgid "Motor Positions" +msgstr "" + +msgid "" +"This process is taking longer than expected...\n" +"If you have a poor internet connection, this can take some time" +msgstr "" + +msgid "" +"The simulator may have failed to load.\n" +"Please submit a feedback form to let us know!" +msgstr "" + +msgid "Initializing Simulator..." +msgstr "" + +msgid "all of" +msgstr "" + +msgid "one or more of" +msgstr "" + +msgid "exactly one of" +msgstr "" + +msgid "once" +msgstr "" + +msgid "not" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Failure" +msgstr "" + +msgid "Editor" +msgstr "" + +msgid "World" +msgstr "" + +msgid "Script Editor" +msgstr "" + +msgid "Console" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Feedback" +msgstr "" + +msgid "Reset World" +msgstr "" + +msgid "Layout" +msgstr "" + +msgid "User Interface" +msgstr "" + +msgid "Simulation" +msgstr "" + +msgid "Locale" +msgstr "" + +msgid "Switch languages" +msgstr "" + +msgid "Sensor noise" +msgstr "" + +msgid "Controls whether sensor outputs are affected by random noise" +msgstr "" + +msgid "Realistic sensors" +msgstr "" + +msgid "" +"Controls whether sensors behave like real-world sensors instead of like " +"ideal sensors. For example, real-world ET sensors are nonlinear" +msgstr "" + +msgid "Autocomplete" +msgstr "" + +msgid "Controls autocompletion of code, brackets, and quotes" +msgstr "" + +msgid "Version %s (%s)" +msgstr "" + +msgid "Copyright" +msgstr "" + +msgid "This software is licensed under the terms of the" +msgstr "" + +msgid "Thank you to the following contributors and testers:" +msgstr "" + +msgid "Want to help improve the simulator and get your name listed here?" +msgstr "" + +msgid "GitHub repository" +msgstr "" + +msgid "We're happy to help you get started!" +msgstr "" + +msgid "" +"Give a helpful description of a problem you're facing, or a feature you'd " +"like to request" +msgstr "" + +msgid "" +"Thanks for using the KIPR Simulator! Find a bug? Have a feature request? " +"Let us know!" +msgstr "" + +msgid "How has your experience using the KIPR Simulator been?" +msgstr "" + +msgid "Email (optional): " +msgstr "" + +msgid "Include anonymous usage data to help KIPR developers" +msgstr "" + +msgid "Please try again," +msgstr "" + +msgid "open an issue on our github page" +msgstr "" + +msgid ", or" +msgstr "" + +msgid "email KIPR." +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Feedback Success" +msgstr "" + +msgid "Feedback successfully submitted!" +msgstr "" + +msgid "Thank you for helping improve the KIPR Simulator!" +msgstr "" + +msgid "Open World" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Description: " +msgstr "" + +msgid "Author: " +msgstr "" + +msgid "Me" +msgstr "" + +msgid "Select a scene to see more details" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "New World" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Delete %s?" +msgstr "" + +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Copy World" +msgstr "" + +msgid "Error %d" +msgstr "" + +msgid "Closing this dialog will take you back to the last well-known state." +msgstr "" + +msgid "If this error persists, please submit feedback." +msgstr "" + +msgid "World Settings" +msgstr "" + +msgid "CHALLENGE" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Welcome to the KIPR Simulator!\n" +msgstr "" + +msgid "Compiling...\n" +msgstr "" + +msgid "Compilation succeeded with warnings.\n" +msgstr "" + +msgid "Compilation succeeded.\n" +msgstr "" + +msgid "Compilation failed.\n" +msgstr "" + +msgid "Something went wrong during compilation.\n" +msgstr "" + +msgid "Compilation succeeded with warnings\n" +msgstr "" + +msgid "Compilation succeeded\n" +msgstr "" + +msgid "Modules" +msgstr "" + +msgid "Functions" +msgstr "" + +msgid "Structures" +msgstr "" + +msgid "Enumerations" +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Search..." +msgstr "" + +msgid "Detailed Description" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "Return Value" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Volume" +msgstr "" + +msgid "RGB" +msgstr "" + +msgid "Challenge" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "and External Contributors" +msgstr "" + +msgid "Visit our" +msgstr "" + +msgctxt "Volume (box) in the 3D scene" +msgid "Volume" +msgstr "" + +msgctxt "Red, Green, Blue" +msgid "RGB" +msgstr "" + +msgctxt "Computer text command line (e.g., DOS)" +msgid "Console" +msgstr "" + +msgctxt "A predefined task for the user to complete" +msgid "Challenge" +msgstr "" + +msgctxt "Terminate program execution" +msgid "Stop" +msgstr "" + +msgctxt "Begin program execution" +msgid "Run" +msgstr "" + +msgctxt "Part of copyright notice, after KIPR is listed" +msgid "and External Contributors" +msgstr "" + +msgctxt "URL link to github repository follows" +msgid "Visit our" +msgstr "" + +msgctxt "Rotation order" +msgid "XYZ" +msgstr "" + +msgctxt "Rotation order" +msgid "YZX" +msgstr "" + +msgctxt "Rotation order" +msgid "ZXY" +msgstr "" + +msgctxt "Rotation order" +msgid "XZY" +msgstr "" + +msgctxt "Rotation order" +msgid "YXZ" +msgstr "" + +msgctxt "Rotation order" +msgid "ZYX" +msgstr "" diff --git a/i18n/tsconfig.json b/i18n/tsconfig.json new file mode 100644 index 00000000..300f0b91 --- /dev/null +++ b/i18n/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "ES2017", + "module": "commonjs", + "moduleResolution": "NodeNext" + } +} \ No newline at end of file diff --git a/i18n/util.ts b/i18n/util.ts new file mode 100644 index 00000000..2fe36780 --- /dev/null +++ b/i18n/util.ts @@ -0,0 +1,15 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +export const walkDir = (dir: string, callback: (file: string) => void) => { + const files = fs.readdirSync(dir); + for (const file of files) { + const filePath = path.resolve(dir, file); + const stat = fs.statSync(filePath); + if (stat.isDirectory()) { + walkDir(filePath, callback); + } else if (stat.isFile()) { + callback(filePath); + } + } +}; \ No newline at end of file diff --git a/package.json b/package.json index d28144a4..e28355a0 100644 --- a/package.json +++ b/package.json @@ -12,18 +12,22 @@ "test": "env TS_NODE_PROJECT=\"tsconfig.testing.json\" mocha --recursive --extension ts --require ts-node/register test", "start": "yarn run start-dev", "start-dev": "webpack-dev-server --host 0.0.0.0 --config=configs/webpack/dev.js", - "start-prod": "yarn run build && node express.js" + "start-prod": "yarn run build && node express.js", + "generate-i18n": "ts-node i18n/generate.ts", + "build-i18n": "ts-node i18n/build.ts" }, "devDependencies": { "@babel/core": "^7.9.0", "@babel/plugin-syntax-import-meta": "^7.10.4", "@types/chai": "^4.3.3", + "@types/gettext-parser": "^4.0.2", "@types/history": "^4.7.2", "@types/qs": "^6.9.7", "@types/react-dom": "^16.9.5", "@types/react-redux": "^7.1.18", "@types/react-router": "^5.0.0", "@types/redux": "^3.6.0", + "@types/sprintf-js": "^1.1.2", "@types/styletron-engine-atomic": "^1.1.1", "@types/styletron-react": "^5.0.2", "@types/uuid": "^8.3.1", @@ -33,6 +37,7 @@ "chai": "^4.3.6", "eslint": "^7.22.0", "file-loader": "^6.0.0", + "gettext-parser": "^6.0.0", "html-webpack-plugin": "^5.3.1", "mocha": "^10.0.0", "npm-dts-webpack-plugin": "^1.3.12", @@ -80,6 +85,7 @@ "react-router": "^5.0.0", "react-router-dom": "^5.3.0", "redux": "^4.1.0", + "sprintf-js": "^1.1.2", "style-loader": "^2.0.0", "styletron": "^3.0.4", "styletron-engine-atomic": "^1.4.7", diff --git a/src/App.tsx b/src/App.tsx index 133beb27..60ed48b5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,7 +11,6 @@ import db from './db'; import { connect } from 'react-redux'; import { push } from 'connected-react-router'; import LoginPage from './login/LoginPage'; -import WidgetTest from './pages/WidgetTest'; import ChallengeRoot from './components/ChallengeRoot'; import DocumentationRoot from './components/documentation/DocumentationRoot'; import DocumentationWindow from './components/documentation/DocumentationWindow'; @@ -76,7 +75,6 @@ class App extends React.Component { - diff --git a/src/Sim.tsx b/src/Sim.tsx index a0d56704..0e183003 100644 --- a/src/Sim.tsx +++ b/src/Sim.tsx @@ -20,6 +20,7 @@ import Node from './state/State/Scene/Node'; import { Robots } from './state/State'; + let Ammo: unknown; if (SIMULATOR_HAS_AMMO) { // This is on a non-standard path specified in the webpack config. @@ -35,11 +36,8 @@ import ScriptManager from './ScriptManager'; import Geometry from './state/State/Scene/Geometry'; import Camera from './state/State/Scene/Camera'; - export let ACTIVE_SPACE: Space; - - export class Space { private static instance: Space; @@ -164,7 +162,7 @@ export class Space { decoder: { wasmUrl: '/static/draco_wasm_wrapper_gltf.js', wasmBinaryUrl: '/static/draco_decoder_gltf.wasm', - fallbackUrl: '/static/draco_decoder_gltf.js' + fallbackUrl: '/static/draco_decoder_gltf.js', } }; } diff --git a/src/challenges/jbc6c.ts b/src/challenges/jbc6c.ts index d8c9c42d..0a6a8295 100644 --- a/src/challenges/jbc6c.ts +++ b/src/challenges/jbc6c.ts @@ -3,9 +3,11 @@ import Challenge from '../state/State/Challenge'; import Expr from '../state/State/Challenge/Expr'; import LocalizedString from '../util/LocalizedString'; +import tr from '@i18n'; + export default { - name: { [LocalizedString.EN_US]: 'JBC Challenge 6C' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 6C: Empty the Garage' }, + name: tr('JBC Challenge 6C'), + description: tr('Junior Botball Challenge 6C: Empty the Garage'), author: { type: Author.Type.Organization, id: 'kipr' @@ -18,40 +20,40 @@ export default { defaultLanguage: 'c', events: { canALifted: { - name: { [LocalizedString.EN_US]: 'Can A Lifted' }, - description: { [LocalizedString.EN_US]: 'Can A picked up' }, + name: tr('Can A Lifted'), + description: tr('Can A picked up') }, canBLifted: { - name: { [LocalizedString.EN_US]: 'Can B Lifted' }, - description: { [LocalizedString.EN_US]: 'Can B picked up' }, + name: tr('Can B Lifted'), + description: tr('Can B picked up'), }, canCLifted: { - name: { [LocalizedString.EN_US]: 'Can C Lifted' }, - description: { [LocalizedString.EN_US]: 'Can C picked up' }, + name: tr('Can C Lifted'), + description: tr('Can C picked up'), }, canAPlaced: { - name: { [LocalizedString.EN_US]: 'Can A Placed' }, - description: { [LocalizedString.EN_US]: 'Can A placed on circle 2' }, + name: tr('Can A Placed'), + description: tr('Can A placed on circle 2'), }, canBPlaced: { - name: { [LocalizedString.EN_US]: 'Can B Placed' }, - description: { [LocalizedString.EN_US]: 'Can A placed on circle 9' }, + name: tr('Can B Placed'), + description: tr('Can A placed on circle 9'), }, canCPlaced: { - name: { [LocalizedString.EN_US]: 'Can C Placed' }, - description: { [LocalizedString.EN_US]: 'Can A placed on circle 10' }, + name: tr('Can C Placed'), + description: tr('Can A placed on circle 10'), }, canAUpright: { - name: { [LocalizedString.EN_US]: 'Can A Upright' }, - description: { [LocalizedString.EN_US]: 'Can A upright on circle 2' }, + name: tr('Can A Upright'), + description: tr('Can A upright on circle 2'), }, canBUpright: { - name: { [LocalizedString.EN_US]: 'Can B Upright' }, - description: { [LocalizedString.EN_US]: 'Can B upright on circle 9' }, + name: tr('Can B Upright'), + description: tr('Can B upright on circle 9'), }, canCUpright: { - name: { [LocalizedString.EN_US]: 'Can C Upright' }, - description: { [LocalizedString.EN_US]: 'Can C upright on circle 10' }, + name: tr('Can C Upright'), + description: tr('Can C upright on circle 10'), }, }, success: { diff --git a/src/components/AboutDialog.tsx b/src/components/AboutDialog.tsx index 9d0c8b00..6ae78613 100644 --- a/src/components/AboutDialog.tsx +++ b/src/components/AboutDialog.tsx @@ -10,11 +10,23 @@ import { faCopyright } from '@fortawesome/free-solid-svg-icons'; import KIPR_LOGO_BLACK from '../assets/KIPR-Logo-Black-Text-Clear-Large.png'; import KIPR_LOGO_WHITE from '../assets/KIPR-Logo-White-Text-Clear-Large.png'; -export interface AboutDialogProps extends ThemeProps, StyleProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; +import { State as ReduxState } from '../state'; +import LocalizedString from '../util/LocalizedString'; +import { sprintf } from 'sprintf-js'; +import Dict from '../Dict'; + +export interface AboutDialogPublicProps extends ThemeProps, StyleProps { onClose: () => void; } -type Props = AboutDialogProps; +interface AboutDialogPrivateProps { + locale: LocalizedString.Language; +} + +type Props = AboutDialogPublicProps & AboutDialogPrivateProps; const Logo = styled('img', { width: '150px', @@ -49,10 +61,10 @@ const CopyrightContainer = styled('div', { flex: '1 1' }); -export class AboutDialog extends React.PureComponent { +class AboutDialog extends React.PureComponent { render() { const { props } = this; - const { theme, onClose } = props; + const { theme, onClose, locale } = props; let logo: JSX.Element; @@ -68,18 +80,18 @@ export class AboutDialog extends React.PureComponent { } return ( - + {logo} - Version {SIMULATOR_VERSION} ({SIMULATOR_GIT_HASH}) + {LocalizedString.lookup(Dict.map(tr('Version %s (%s)'), (str: string) => sprintf(str, SIMULATOR_VERSION, SIMULATOR_GIT_HASH)), locale)}

- Copyright 2022 KISS Institute for Practical Robotics and External Contributors + {LocalizedString.lookup(tr('Copyright'), locale)} 2023 KISS Institute for Practical Robotics {LocalizedString.lookup(tr('and External Contributors', 'Part of copyright notice, after KIPR is listed'), locale)}

- This software is licensed under the terms of the GNU General Public License v3. + {LocalizedString.lookup(tr('This software is licensed under the terms of the'), locale)} GNU General Public License v3.

- Thank you to the following contributors and testers: + {LocalizedString.lookup(tr('Thank you to the following contributors and testers:'), locale)}
  • Tim Corbly
  • Will Hawkins
  • @@ -89,11 +101,15 @@ export class AboutDialog extends React.PureComponent {
  • Nafis Zaman
- Want to help improve the simulator and get your name listed here?
- Visit our GitHub repository. - We're happy to help you get started! + {LocalizedString.lookup(tr('Want to help improve the simulator and get your name listed here?'), locale)}
+ {LocalizedString.lookup(tr('Visit our', 'URL link to github repository follows'), locale)} {LocalizedString.lookup(tr('GitHub repository'), locale)}. + {LocalizedString.lookup(tr('We\'re happy to help you get started!'), locale)}
); } -} \ No newline at end of file +} + +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(AboutDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Challenge/EventViewer.tsx b/src/components/Challenge/EventViewer.tsx index 1830aa3d..b3926ef6 100644 --- a/src/components/Challenge/EventViewer.tsx +++ b/src/components/Challenge/EventViewer.tsx @@ -26,17 +26,18 @@ const Description = styled('div', { interface EventViewerProps extends StyleProps { event: Event; eventState?: boolean; + locale: LocalizedString.Language; } -const EventViewer: React.FC = ({ event: { name, description }, eventState, style, className }) => { +const EventViewer: React.FC = ({ event: { name, description }, eventState, style, className, locale }) => { return ( - {LocalizedString.lookup(name, LocalizedString.EN_US)} + {LocalizedString.lookup(name, locale)} {eventState !== undefined && } - {description && {LocalizedString.lookup(description, LocalizedString.EN_US)}} + {description && {LocalizedString.lookup(description, locale)}} ); }; diff --git a/src/components/Challenge/LoadingOverlay.tsx b/src/components/Challenge/LoadingOverlay.tsx index e9443aad..88c95a31 100644 --- a/src/components/Challenge/LoadingOverlay.tsx +++ b/src/components/Challenge/LoadingOverlay.tsx @@ -11,6 +11,10 @@ import { Dialog } from '../Dialog'; import { Modal } from '../Modal'; import { DARK } from '../theme'; +import tr from '@i18n'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; + const Container = styled('div', { display: 'flex', flexDirection: 'column', @@ -55,29 +59,34 @@ const LoadingButton = withStyleDeep(Button, { backgroundColor: 'grey', }); -export default ({ challenge, loading, onStartClick }: { challenge: AsyncChallenge; onStartClick: () => void; loading: boolean; }) => { +const LoadingOverlay = ({ challenge, loading, onStartClick, locale }: { challenge: AsyncChallenge; onStartClick: () => void; loading: boolean; locale: LocalizedString.Language; }) => { const latestChallenge = Async.latestValue(challenge); if (!latestChallenge) return null; return ( - CHALLENGE + {LocalizedString.lookup(tr('CHALLENGE'), locale)} - {LocalizedString.lookup(latestChallenge.name, LocalizedString.EN_US)} + {LocalizedString.lookup(latestChallenge.name, locale)} - {LocalizedString.lookup(latestChallenge.description, LocalizedString.EN_US)} + {LocalizedString.lookup(latestChallenge.description, locale)} {!loading - ? Start - : Loading... + ? {LocalizedString.lookup(tr('Start'), locale)} + : {LocalizedString.lookup(tr('Loading...'), locale)} } ); -}; \ No newline at end of file +}; + + +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(LoadingOverlay) as React.ComponentType<{ challenge: AsyncChallenge; onStartClick: () => void; loading: boolean; }>; \ No newline at end of file diff --git a/src/components/Challenge/Operator.tsx b/src/components/Challenge/Operator.tsx index ff30c098..1479b065 100644 --- a/src/components/Challenge/Operator.tsx +++ b/src/components/Challenge/Operator.tsx @@ -1,11 +1,14 @@ import * as React from 'react'; import { styled } from 'styletron-react'; +import LocalizedString from '../../util/LocalizedString'; import Dict from '../../Dict'; import Expr from '../../state/State/Challenge/Expr'; import { StyleProps } from '../../style'; +import tr from '@i18n'; export interface OperatorProps extends StyleProps { type: Expr.Type.And | Expr.Type.Or | Expr.Type.Xor | Expr.Type.Once | Expr.Type.Not; + locale: LocalizedString.Language; } type Props = OperatorProps; @@ -13,23 +16,23 @@ type Props = OperatorProps; const Container = styled('div', { }); -const Operator: React.FC = ({ type, className, style }) => { +const Operator: React.FC = ({ type, className, style, locale }) => { let text: string; switch (type) { case Expr.Type.And: - text = 'all of'; + text = LocalizedString.lookup(tr('all of'), locale); break; case Expr.Type.Or: - text = 'one or more of'; + text = LocalizedString.lookup(tr('one or more of'), locale); break; case Expr.Type.Xor: - text = 'exactly one of'; + text = LocalizedString.lookup(tr('exactly one of'), locale); break; case Expr.Type.Once: - text = 'once'; + text = LocalizedString.lookup(tr('once'), locale); break; case Expr.Type.Not: - text = 'not'; + text = LocalizedString.lookup(tr('not'), locale); break; } diff --git a/src/components/Challenge/PredicateEditor.tsx b/src/components/Challenge/PredicateEditor.tsx index db2e7d96..b2783411 100644 --- a/src/components/Challenge/PredicateEditor.tsx +++ b/src/components/Challenge/PredicateEditor.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import LocalizedString from '../../util/LocalizedString'; import Dict from '../../Dict'; import Event from '../../state/State/Challenge/Event'; import Expr from '../../state/State/Challenge/Expr'; @@ -14,6 +15,7 @@ export interface PredicateEditorProps extends StyleProps { predicate: Predicate; predicateCompletion?: PredicateCompletion; events: Dict; + locale: LocalizedString.Language; } namespace Node { @@ -39,7 +41,7 @@ namespace Node { type Node

= Node.Terminal

| Node.NonTerminal

; -const treeify = (exprs: Dict, rootId: string, events: Dict, exprStates?: Dict): Node => { +const treeify = (exprs: Dict, rootId: string, events: Dict, locale: LocalizedString.Language, exprStates?: Dict): Node => { const root = exprs[rootId]; switch (root.type) { @@ -53,7 +55,7 @@ const treeify = (exprs: Dict, rootId: string, events: Dict, exprSta // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment props: { type: root.type } as any }, - children: Dict.generate(root.argIds, id => treeify(exprs, id, events, exprStates)), + children: Dict.generate(root.argIds, id => treeify(exprs, id, events, locale, exprStates)), childrenOrdering: root.argIds, state: exprStates ? exprStates[rootId] : undefined }; @@ -67,7 +69,7 @@ const treeify = (exprs: Dict, rootId: string, events: Dict, exprSta // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment props: { type: root.type } as any }, - children: Dict.generate([root.argId], id => treeify(exprs, id, events, exprStates)), + children: Dict.generate([root.argId], id => treeify(exprs, id, events, locale, exprStates)), childrenOrdering: [root.argId], state: exprStates ? exprStates[rootId] : undefined }; @@ -78,7 +80,7 @@ const treeify = (exprs: Dict, rootId: string, events: Dict, exprSta node: { component: EventViewer, // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment - props: { event: events[root.eventId] } as any + props: { event: events[root.eventId], locale } as any }, state: exprStates ? exprStates[rootId] : undefined }; @@ -164,11 +166,12 @@ const PredicateEditor: React.FC = ({ predicateCompletion, events, style, - className + className, + locale }) => { const { exprs, rootId } = predicate; - const tree = treeify(exprs, rootId, events, predicateCompletion ? predicateCompletion.exprStates : undefined); + const tree = treeify(exprs, rootId, events, locale, predicateCompletion ? predicateCompletion.exprStates : undefined); return ( { render() { const { props, state } = this; - const { style, className, theme, challenge, challengeCompletion } = props; + const { style, className, theme, challenge, challengeCompletion, locale } = props; const { collapsed, modal } = state; @@ -139,20 +141,22 @@ class Challenge extends React.PureComponent { {latestChallenge.success && ( -

+
)} {latestChallenge.failure && ( -
+
)} @@ -163,4 +167,6 @@ class Challenge extends React.PureComponent { } } -export default Challenge; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(Challenge) as React.ComponentType; \ No newline at end of file diff --git a/src/components/ChallengeRoot.tsx b/src/components/ChallengeRoot.tsx index 71638240..3027fd91 100644 --- a/src/components/ChallengeRoot.tsx +++ b/src/components/ChallengeRoot.tsx @@ -10,12 +10,12 @@ import { styled } from 'styletron-react'; import { DARK, Theme } from './theme'; import { Layout, LayoutProps, OverlayLayout, OverlayLayoutRedux, SideLayoutRedux } from './Layout'; -import { SettingsDialog } from './SettingsDialog'; -import { AboutDialog } from './AboutDialog'; +import SettingsDialog from './SettingsDialog'; +import AboutDialog from './AboutDialog'; -import { FeedbackDialog } from './Feedback'; +import FeedbackDialog from './Feedback'; import { sendFeedback, FeedbackResponse } from './Feedback/SendFeedback'; -import { FeedbackSuccessDialog } from './Feedback/SuccessModal'; +import FeedbackSuccessDialog from './Feedback/SuccessModal'; import compile from '../compile'; import { SimulatorState } from './SimulatorState'; @@ -76,6 +76,8 @@ import AbstractRobot from '../AbstractRobot'; import Motor from '../AbstractRobot/Motor'; import DocumentationLocation from '../state/State/Documentation/DocumentationLocation'; +import tr from '@i18n'; + namespace Modal { export enum Type { Settings, @@ -188,6 +190,7 @@ interface RootPrivateProps { scene: AsyncScene; challenge?: AsyncChallenge; challengeCompletion?: AsyncChallengeCompletion; + locale: LocalizedString.Language; onChallengeCompletionCreate: (challengeCompletion: ChallengeCompletion) => void; onChallengeCompletionSceneDiffChange: (sceneDiff: OuterObjectPatch) => void; @@ -353,7 +356,7 @@ class Root extends React.Component { layout: Layout.Side, modal: Modal.NONE, simulatorState: SimulatorState.STOPPED, - console: StyledText.text({ text: 'Welcome to the KIPR Simulator!\n', style: STDOUT_STYLE(DARK) }), + console: StyledText.text({ text: LocalizedString.lookup(tr('Welcome to the KIPR Simulator!\n'), props.locale), style: STDOUT_STYLE(DARK) }), theme: DARK, messages: [], settings: DEFAULT_SETTINGS, @@ -646,7 +649,8 @@ class Root extends React.Component { }; private onRunClick_ = () => { - const { state } = this; + const { props, state } = this; + const { locale } = props; const { console, theme } = state; const language = this.currentLanguage; @@ -656,7 +660,7 @@ class Root extends React.Component { case 'c': case 'cpp': { let nextConsole: StyledText = StyledText.extend(console, StyledText.text({ - text: `Compiling...\n`, + text: LocalizedString.lookup(tr('Compiling...\n'), locale), style: STDOUT_STYLE(this.state.theme) })); @@ -683,7 +687,9 @@ class Root extends React.Component { // Show success in console and start running the program const haveWarnings = hasWarnings(messages); nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: `Compilation succeeded${haveWarnings ? ' with warnings' : ''}!\n`, + text: haveWarnings + ? LocalizedString.lookup(tr('Compilation succeeded with warnings\n'), locale) + : LocalizedString.lookup(tr('Compilation succeeded\n'), locale), style: STDOUT_STYLE(this.state.theme) })); @@ -702,7 +708,7 @@ class Root extends React.Component { } nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: `Compilation failed.\n`, + text: LocalizedString.lookup(tr('Compilation failed.\n'), locale), style: STDERR_STYLE(this.state.theme) })); } @@ -716,7 +722,7 @@ class Root extends React.Component { .catch((e: unknown) => { window.console.error(e); nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: 'Something went wrong during compilation.\n', + text: LocalizedString.lookup(tr('Something went wrong during compilation.\n'), locale), style: STDERR_STYLE(this.state.theme) })); @@ -1026,6 +1032,7 @@ export default connect((state: ReduxState, { match: { params: { challengeId } } scene: Dict.unique(builder.scenes), challenge: Dict.unique(builder.challenges), challengeCompletion: Dict.unique(builder.challengeCompletions), + locale: state.i18n.locale, }; }, (dispatch, { match: { params: { challengeId } } }: RootPublicProps) => ({ onChallengeCompletionCreate: (challengeCompletion: ChallengeCompletion) => { diff --git a/src/components/Console/ClearCharm.tsx b/src/components/Console/ClearCharm.tsx index eab06938..e8708b29 100644 --- a/src/components/Console/ClearCharm.tsx +++ b/src/components/Console/ClearCharm.tsx @@ -7,9 +7,13 @@ import { ThemeProps } from '../theme'; import { charmColor } from '../charm-util'; import { faTimes } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; + +import tr from '@i18n'; export interface ClearCharmProps extends StyleProps, ThemeProps { onClick: (event: React.MouseEvent) => void; + locale: LocalizedString.Language; } type Props = ClearCharmProps; @@ -27,12 +31,13 @@ class ClearCharm extends React.PureComponent { const { props } = this; const { theme, - onClick + onClick, + locale } = props; return ( - Clear + {LocalizedString.lookup(tr('Clear'), locale)} ); } diff --git a/src/components/Console/index.tsx b/src/components/Console/index.tsx index d2ac726d..bfdc7b1c 100644 --- a/src/components/Console/index.tsx +++ b/src/components/Console/index.tsx @@ -12,10 +12,13 @@ import { Button } from '../Button'; import { BarComponent } from '../Widget'; import { faFile } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; +import tr from '@i18n'; export const createConsoleBarComponents = ( theme: Theme, onClearConsole: () => void, + locale: LocalizedString.Language ) => { // eslint-disable-next-line @typescript-eslint/ban-types const consoleBar: BarComponent[] = []; @@ -26,7 +29,7 @@ export const createConsoleBarComponents = ( children: <> - {' Clear'} + {' '} {LocalizedString.lookup(tr('Clear'), locale)} , })); diff --git a/src/components/DeleteDialog.tsx b/src/components/DeleteDialog.tsx index daef1e06..d09eaf7e 100644 --- a/src/components/DeleteDialog.tsx +++ b/src/components/DeleteDialog.tsx @@ -10,13 +10,23 @@ import DialogBar from './DialogBar'; import { faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; import LocalizedString from '../util/LocalizedString'; -export interface DeleteDialogProps extends ThemeProps, StyleProps { +import tr from '@i18n'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../state'; +import Dict from '../Dict'; +import { sprintf } from 'sprintf-js'; + +export interface DeleteDialogPublicProps extends ThemeProps, StyleProps { name: LocalizedString; onClose: () => void; onAccept: () => void; } -type Props = DeleteDialogProps; +interface DeleteDialogPrivateProps { + locale: LocalizedString.Language; +} + +type Props = DeleteDialogPublicProps & DeleteDialogPrivateProps; const Container = styled('div', (props: ThemeProps) => ({ color: props.theme.color, @@ -26,17 +36,23 @@ const Container = styled('div', (props: ThemeProps) => ({ class DeleteDialog extends React.PureComponent { render() { const { props } = this; - const { name, theme, onClose, onAccept } = props; + const { name, theme, onClose, onAccept, locale } = props; return ( - + sprintf(str, LocalizedString.lookup(name, locale))), locale)} + onClose={onClose} + > - Are you sure you want to delete {name[LocalizedString.EN_US] || 'this'}? + {LocalizedString.lookup(Dict.map(tr('Are you sure you want to delete %s?'), (str: string) => sprintf(str, LocalizedString.lookup(name, locale))), locale)} - Delete + {LocalizedString.lookup(tr('Delete'), locale)} ); } } -export default DeleteDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(DeleteDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx index 0b023b02..076d2373 100644 --- a/src/components/Editor/Editor.tsx +++ b/src/components/Editor/Editor.tsx @@ -20,7 +20,10 @@ import Dict from '../../Dict'; import * as monaco from 'monaco-editor'; import DocumentationLocation from '../../state/State/Documentation/DocumentationLocation'; import { DocumentationAction } from '../../state/reducer'; +import tr from '@i18n'; import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import LocalizedString from '../../util/LocalizedString'; export enum EditorActionState { None, @@ -39,6 +42,10 @@ export interface EditorPublicProps extends StyleProps, ThemeProps { onDocumentationGoToFuzzy?: (query: string, language: 'c' | 'python') => void; } +interface EditorPrivateProps { + locale: LocalizedString.Language; +} + interface EditorState { } @@ -80,10 +87,12 @@ export type EditorBarTarget = EditorBarTarget.Robot; export const createEditorBarComponents = ({ theme, - target + target, + locale }: { theme: Theme, target: EditorBarTarget, + locale: LocalizedString.Language }) => { // eslint-disable-next-line @typescript-eslint/ban-types @@ -106,7 +115,7 @@ export const createEditorBarComponents = ({ children: <> - {' Indent'} + {' '} {LocalizedString.lookup(tr('Indent'), locale)} })); @@ -116,7 +125,7 @@ export const createEditorBarComponents = ({ children: <> - {' Download'} + {' '} {LocalizedString.lookup(tr('Download'), locale)} })); @@ -126,7 +135,7 @@ export const createEditorBarComponents = ({ children: <> - {' Reset'} + {' '} {LocalizedString.lookup(tr('Reset'), locale)} })); @@ -146,13 +155,15 @@ export const createEditorBarComponents = ({ if (errors > 0) editorBar.push(BarComponent.create(ErrorCharm, { theme, count: errors, - onClick: target.onErrorClick + onClick: target.onErrorClick, + locale })); if (warnings > 0) editorBar.push(BarComponent.create(WarningCharm, { theme, count: warnings, - onClick: target.onErrorClick + onClick: target.onErrorClick, + locale })); break; } diff --git a/src/components/Editor/ErrorCharm.tsx b/src/components/Editor/ErrorCharm.tsx index 0a12642a..f26ef3a3 100644 --- a/src/components/Editor/ErrorCharm.tsx +++ b/src/components/Editor/ErrorCharm.tsx @@ -7,11 +7,15 @@ import { ThemeProps } from '../theme'; import { charmColor } from '../charm-util'; import { faTimesCircle } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; + +import tr from '@i18n'; export interface ErrorCharmProps extends StyleProps, ThemeProps { count: number; onClick: (event: React.MouseEvent) => void; + locale: LocalizedString.Language; } type Props = ErrorCharmProps; @@ -30,12 +34,13 @@ class ErrorCharm extends React.PureComponent { const { theme, count, - onClick + onClick, + locale } = props; return ( - {count} Error{count === 1 ? '' : 's'} + {count} {LocalizedString.lookup(tr('Error(s)'), locale)} ); } diff --git a/src/components/Editor/WarningCharm.tsx b/src/components/Editor/WarningCharm.tsx index 14cddbb3..5303b476 100644 --- a/src/components/Editor/WarningCharm.tsx +++ b/src/components/Editor/WarningCharm.tsx @@ -7,11 +7,15 @@ import { ThemeProps } from '../theme'; import { charmColor } from '../charm-util'; import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; +import tr from '@i18n'; export interface WarningCharmProps extends StyleProps, ThemeProps { count: number; onClick: (event: React.MouseEvent) => void; + + locale: LocalizedString.Language; } type Props = WarningCharmProps; @@ -30,12 +34,13 @@ class WarningCharm extends React.PureComponent { const { theme, count, - onClick + onClick, + locale } = props; return ( - {count} Warning{count === 1 ? '' : 's'} + {count} {LocalizedString.lookup(tr('Warning(s)'), locale)} ); } diff --git a/src/components/ExtraMenu.tsx b/src/components/ExtraMenu.tsx index 89d32ace..cb905c44 100644 --- a/src/components/ExtraMenu.tsx +++ b/src/components/ExtraMenu.tsx @@ -6,7 +6,14 @@ import { Fa } from './Fa'; import { ThemeProps } from './theme'; import { faBook, faCaretSquareLeft, faClone, faCogs, faCommentDots, faCopy, faEye, faEyeSlash, faFolderOpen, faPlus, faQuestion, faSave, faSignOutAlt } from '@fortawesome/free-solid-svg-icons'; -export interface ExtraMenuProps extends StyleProps, ThemeProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; +import LocalizedString from '../util/LocalizedString'; + +export interface ExtraMenuPublicProps extends StyleProps, ThemeProps { onLogoutClick: (event: React.MouseEvent) => void; onFeedbackClick?: (event: React.MouseEvent) => void; onDocumentationClick: (event: React.MouseEvent) => void; @@ -14,11 +21,15 @@ export interface ExtraMenuProps extends StyleProps, ThemeProps { onAboutClick: (event: React.MouseEvent) => void; } +interface ExtraMenuPrivateProps { + locale: LocalizedString.Language; +} + interface ExtraMenuState { } -type Props = ExtraMenuProps; +type Props = ExtraMenuPublicProps & ExtraMenuPrivateProps; type State = ExtraMenuState; const Container = styled('div', (props: ThemeProps) => ({ @@ -90,17 +101,20 @@ class ExtraMenu extends React.PureComponent { onDocumentationClick, onFeedbackClick, onSettingsClick, + locale, } = props; return ( - Documentation - Settings - About - {onFeedbackClick && Feedback} - Logout + {LocalizedString.lookup(tr('Documentation'), locale)} + {LocalizedString.lookup(tr('Settings'), locale)} + {LocalizedString.lookup(tr('About'), locale)} + {onFeedbackClick && {LocalizedString.lookup(tr('Feedback'), locale)}} + {LocalizedString.lookup(tr('Logout'), locale)} ); } } -export default ExtraMenu; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}))(ExtraMenu) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Feedback/SuccessModal.tsx b/src/components/Feedback/SuccessModal.tsx index 3d21c066..9c9a8927 100644 --- a/src/components/Feedback/SuccessModal.tsx +++ b/src/components/Feedback/SuccessModal.tsx @@ -5,16 +5,26 @@ import { Dialog } from '../Dialog'; import { ThemeProps } from '../theme'; import { FeedbackContainer, CenterContainer } from './index'; -export interface FeedbackSuccessDialogProp extends ThemeProps, StyleProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import LocalizedString from '../../util/LocalizedString'; + +export interface FeedbackSuccessDialogPublicProps extends ThemeProps, StyleProps { onClose: () => void; } +interface FeedbackSuccessDialogPrivateProps { + locale: LocalizedString.Language; +} + interface FeedbackSuccessDialogState {} -type Props = FeedbackSuccessDialogProp; +type Props = FeedbackSuccessDialogPublicProps & FeedbackSuccessDialogPrivateProps; type State = FeedbackSuccessDialogState; -export class FeedbackSuccessDialog extends React.PureComponent { +class FeedbackSuccessDialog extends React.PureComponent { constructor(props: Props) { super(props); this.state = { @@ -24,19 +34,23 @@ export class FeedbackSuccessDialog extends React.PureComponent { render() { const { props, state } = this; - const { style, className, theme, onClose } = props; + const { style, className, theme, onClose, locale } = props; return ( - + -

Feedback successfully submitted!

-

Thank you for helping improve the KIPR Simulator!

+

{LocalizedString.lookup(tr('Feedback successfully submitted!'), locale)}

+

{LocalizedString.lookup(tr('Thank you for helping improve the KIPR Simulator!'), locale)}

); } -} \ No newline at end of file +} + +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(FeedbackSuccessDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Feedback/index.tsx b/src/components/Feedback/index.tsx index 0d1af76b..ad1deee9 100644 --- a/src/components/Feedback/index.tsx +++ b/src/components/Feedback/index.tsx @@ -11,16 +11,26 @@ import { Fa } from '../Fa'; import { faFrown, faMeh, faPaperPlane, faSmileBeam } from '@fortawesome/free-solid-svg-icons'; -export interface FeedbackDialogProp extends ThemeProps, StyleProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import LocalizedString from '../../util/LocalizedString'; + +export interface FeedbackDialogPublicProps extends ThemeProps, StyleProps { onClose: () => void; onSubmit: () => void; feedback: Feedback; onFeedbackChange: (settings: Partial) => void; } +interface FeedbackDialogPrivateProps { + locale: LocalizedString.Language; +} + interface FeedbackDialogState {} -type Props = FeedbackDialogProp; +type Props = FeedbackDialogPublicProps & FeedbackDialogPrivateProps; type State = FeedbackDialogState; export const FeedbackContainer = styled('div', (props: ThemeProps) => ({ @@ -46,7 +56,7 @@ export const FeedbackLink = styled('a', () => ({ color: 'lightblue', })); -export class FeedbackDialog extends React.PureComponent { +class FeedbackDialog extends React.PureComponent { constructor(props: Props) { super(props); this.state = { @@ -83,10 +93,10 @@ export class FeedbackDialog extends React.PureComponent { }; private createFeedbackTextArea = (getValue: (feedback: Feedback) => string, getUpdatedFeedback: (newValue: string) => Partial) => { - const { theme, feedback: currentFeedback, onFeedbackChange } = this.props; + const { theme, feedback: currentFeedback, onFeedbackChange, locale } = this.props; return ( - { onFeedbackChange(getUpdatedFeedback(event.target.value)); @@ -110,23 +120,27 @@ export class FeedbackDialog extends React.PureComponent { render() { const { props, state } = this; - const { style, className, theme, onClose, onSubmit } = props; + const { style, className, theme, onClose, onSubmit, locale } = props; return ( - + - Thanks for using the KIPR Simulator! Find a bug? Have a feature request? Let us know! + {LocalizedString.lookup(tr('Thanks for using the KIPR Simulator! Find a bug? Have a feature request? Let us know!'), locale)}

- Feedback + {LocalizedString.lookup(tr('Feedback'), locale)}
{this.createFeedbackTextArea( (feedback: Feedback) => feedback.feedback, (newValue: string) => ({ feedback: newValue }) )} - How has your experience using the KIPR Simulator been? + {LocalizedString.lookup(tr('How has your experience using the KIPR Simulator been?'), locale)}
@@ -138,7 +152,7 @@ export class FeedbackDialog extends React.PureComponent { - Email (optional): + {LocalizedString.lookup(tr('Email (optional): '), locale)} {this.createFeedbackEmailInput( @@ -149,7 +163,7 @@ export class FeedbackDialog extends React.PureComponent { - Include anonymous usage data to help KIPR developers + {LocalizedString.lookup(tr('Include anonymous usage data to help KIPR developers'), locale)} {this.createCheckbox( @@ -165,22 +179,26 @@ export class FeedbackDialog extends React.PureComponent { {this.props.feedback.error &&

- <>Please try again, + <>{LocalizedString.lookup(tr('Please try again,'), locale)} - open an issue on our github page + {LocalizedString.lookup(tr('open an issue on our github page'), locale)} - <>, or + <>{LocalizedString.lookup(tr(', or'), locale)} - email KIPR. + {LocalizedString.lookup(tr('email KIPR.'), locale)}

}
- Submit + {LocalizedString.lookup(tr('Submit'), props.locale)}
); } -} \ No newline at end of file +} + +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(FeedbackDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Info/Info.tsx b/src/components/Info/Info.tsx index 53c31655..f88a2ecc 100644 --- a/src/components/Info/Info.tsx +++ b/src/components/Info/Info.tsx @@ -18,18 +18,25 @@ import Motor from '../../AbstractRobot/Motor'; import { faSync } from '@fortawesome/free-solid-svg-icons'; import Async from '../../state/State/Async'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; -export interface InfoProps extends StyleProps, ThemeProps { + +export interface InfoPublicProps extends StyleProps, ThemeProps { node: Node.Robot; onOriginChange: (origin: ReferenceFrame) => void; } +interface InfoPrivateProps { + locale: LocalizedString.Language; +} + interface InfoState { collapsed: { [section: string]: boolean } } -type Props = InfoProps; +type Props = InfoPublicProps & InfoPrivateProps; type State = InfoState; const Row = styled('div', (props: ThemeProps) => ({ @@ -78,29 +85,7 @@ const SIMULATION_NAME = StyledText.text({ text: 'Simulation', }); -const SERVOS_NAME = StyledText.text({ - text: 'Servos', -}); -const MOTOR_VELOCITIES_NAME = StyledText.text({ - text: 'Motor Velocities', -}); - -const MOTOR_POSITIONS_NAME = StyledText.compose({ - items: [ - StyledText.text({ - text: 'Motor Positions', - }), - ] -}); - -const ANALOG_NAME = StyledText.text({ - text: 'Analog Sensors', -}); - -const DIGITAL_NAME = StyledText.text({ - text: 'Digital Sensors', -}); const ResetIcon = styled(Fa, ({ theme }: ThemeProps) => ({ marginLeft: `${theme.itemPadding * 2}px`, @@ -142,6 +127,7 @@ class Info extends React.PureComponent { className, theme, node, + locale } = props; if (!node || node.type !== 'robot') return null; @@ -151,7 +137,7 @@ class Info extends React.PureComponent { const locationName = StyledText.compose({ items: [ StyledText.text({ - text: 'Start Location', + text: LocalizedString.lookup(tr('Start Location'), locale), }), StyledText.component({ component: ResetIcon, @@ -180,13 +166,13 @@ class Info extends React.PureComponent { const motor = node.state.motors[i]; motorVelocities.push( - + ); motorPositions.push( - + ); } @@ -195,7 +181,7 @@ class Info extends React.PureComponent { for (let i = 0; i < 6; ++i) { analogSensors.push( - + ); } @@ -204,10 +190,34 @@ class Info extends React.PureComponent { for (let i = 0; i < 6; ++i) { digitalSensors.push( - + ); } + + const analogName = StyledText.text({ + text: LocalizedString.lookup(tr('Analog Sensors'), locale), + }); + + const digitalName = StyledText.text({ + text: LocalizedString.lookup(tr('Digital Sensors'), locale), + }); + + const servosName = StyledText.text({ + text: LocalizedString.lookup(tr('Servos'), locale), + }); + + const motorVelocitiesName = StyledText.text({ + text: LocalizedString.lookup(tr('Motor Velocities'), locale), + }); + + const motorPositionsName = StyledText.compose({ + items: [ + StyledText.text({ + text: LocalizedString.lookup(tr('Motor Positions'), locale), + }), + ] + }); return ( @@ -222,10 +232,11 @@ class Info extends React.PureComponent { theme={theme} origin={node.startingOrigin} onOriginChange={props.onOriginChange} + locale={locale} /> { {servos} { {motorVelocities} { {motorPositions} { {analogSensors} { } } -export default Info; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}))(Info) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Info/Location.tsx b/src/components/Info/Location.tsx index 69bc35cc..f55aa52e 100644 --- a/src/components/Info/Location.tsx +++ b/src/components/Info/Location.tsx @@ -6,10 +6,14 @@ import { ThemeProps } from '../theme'; import ValueEdit from '../ValueEdit'; import deepNeq from '../../deepNeq'; import { ReferenceFrame, Rotation, Vector3 } from '../../unit-math'; +import LocalizedString from '../../util/LocalizedString'; + +import tr from '@i18n'; export interface LocationProps extends ThemeProps, StyleProps { origin?: ReferenceFrame; onOriginChange: (origin: ReferenceFrame, modifyReferenceScene: boolean) => void; + locale: LocalizedString.Language; } type Props = LocationProps; @@ -105,7 +109,7 @@ export default class Location extends React.PureComponent { render() { const { props } = this; - const { theme, style, className, origin } = props; + const { theme, style, className, origin, locale } = props; if (!origin) return null; @@ -120,10 +124,10 @@ export default class Location extends React.PureComponent { return ( - - - - + + + + ); } diff --git a/src/components/Layout/LayoutPicker.tsx b/src/components/Layout/LayoutPicker.tsx index 49f7f81f..a21c1b4e 100644 --- a/src/components/Layout/LayoutPicker.tsx +++ b/src/components/Layout/LayoutPicker.tsx @@ -6,8 +6,12 @@ import { Fa } from '../Fa'; import { Layout } from './Layout'; import { ThemeProps } from '../theme'; import { faCaretSquareLeft, faClone, faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; -export interface LayoutPickerProps extends StyleProps, ThemeProps { +export interface LayoutPickerPublicProps extends StyleProps, ThemeProps { layout: Layout, onLayoutChange: (layout: Layout) => void; @@ -16,11 +20,15 @@ export interface LayoutPickerProps extends StyleProps, ThemeProps { onHideAll: () => void; } +interface LayoutPickerPrivateProps { + locale: LocalizedString.Language; +} + interface LayoutPickerState { } -type Props = LayoutPickerProps; +type Props = LayoutPickerPublicProps & LayoutPickerPrivateProps; type State = LayoutPickerState; const Container = styled('div', (props: ThemeProps) => ({ @@ -104,19 +112,19 @@ class LayoutPicker extends React.PureComponent { render() { const { props } = this; - const { theme, layout, onHideAll, onShowAll } = props; + const { theme, layout, onHideAll, onShowAll, locale } = props; return ( - Layouts - Overlay - Side + {LocalizedString.lookup(tr('Layouts'), locale)} + {LocalizedString.lookup(tr('Overlay'), locale)} + {LocalizedString.lookup(tr('Side'), locale)} {/* Bottom */} {layout === Layout.Overlay ? ( <> - Options - Show All - Hide All + {LocalizedString.lookup(tr('Options'), locale)} + {LocalizedString.lookup(tr('Show All'), locale)} + {LocalizedString.lookup(tr('Hide All'), locale)} ) : undefined} @@ -124,4 +132,6 @@ class LayoutPicker extends React.PureComponent { } } -export default LayoutPicker; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}))(LayoutPicker) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Layout/OverlayLayout.tsx b/src/components/Layout/OverlayLayout.tsx index 289d3f24..97e4d6c4 100644 --- a/src/components/Layout/OverlayLayout.tsx +++ b/src/components/Layout/OverlayLayout.tsx @@ -10,7 +10,7 @@ import World, { createWorldBarComponents } from '../World'; import { Info } from '../Info'; import { LayoutEditorTarget, LayoutProps } from './Layout'; -import { SimulatorArea } from '../SimulatorArea'; +import SimulatorArea from '../SimulatorArea'; import { Theme, ThemeProps } from '../theme'; import Widget, { BarComponent, Mode, Size, WidgetProps } from '../Widget'; import { State as ReduxState } from '../../state'; @@ -21,6 +21,9 @@ import Async from '../../state/State/Async'; import { EMPTY_OBJECT } from '../../util'; import Challenge from '../Challenge'; import { ReferenceFrame } from '../../unit-math'; +import LocalizedString from '../../util/LocalizedString'; + +import tr from '@i18n'; export interface OverlayLayoutProps extends LayoutProps { @@ -28,6 +31,7 @@ export interface OverlayLayoutProps extends LayoutProps { interface ReduxOverlayLayoutProps { robots: Dict; + locale: LocalizedString.Language; } interface OverlayLayoutState { @@ -360,7 +364,8 @@ export class OverlayLayout extends React.PureComponent ({ }), null, { forwardRef: true })(OverlayLayout); \ No newline at end of file diff --git a/src/components/Layout/SideLayout.tsx b/src/components/Layout/SideLayout.tsx index b0cf4d4d..48d5d68e 100644 --- a/src/components/Layout/SideLayout.tsx +++ b/src/components/Layout/SideLayout.tsx @@ -11,7 +11,7 @@ import World, { createWorldBarComponents } from '../World'; import { Info } from '../Info'; import { LayoutEditorTarget, LayoutProps } from './Layout'; -import { SimulatorArea } from '../SimulatorArea'; +import SimulatorArea from '../SimulatorArea'; import { TabBar } from '../TabBar'; import Widget, { BarComponent, Mode, Size } from '../Widget'; import { Slider } from '../Slider'; @@ -26,6 +26,11 @@ import { EMPTY_OBJECT } from '../../util'; import Challenge from '../Challenge'; import { ReferenceFrame } from '../../unit-math'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; + + + // 3 panes: // Editor / console // Robot Info @@ -51,6 +56,7 @@ export interface SideLayoutProps extends LayoutProps { interface ReduxSideLayoutProps { robots: Dict; + locale: LocalizedString.Language; } interface SideLayoutState { @@ -201,6 +207,7 @@ export class SideLayout extends React.PureComponent @@ -270,7 +278,7 @@ export class SideLayout extends React.PureComponent ({ diff --git a/src/components/Loading.tsx b/src/components/Loading.tsx index 93ca3443..ca30799c 100644 --- a/src/components/Loading.tsx +++ b/src/components/Loading.tsx @@ -2,7 +2,12 @@ import * as React from 'react'; import ReactLoading, { LoadingType } from 'react-loading'; import { styled } from 'styletron-react'; -export interface LoadingProps { +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../state'; + +export interface LoadingPublicProps { message?: string errorMessage?: string color?: string @@ -11,6 +16,12 @@ export interface LoadingProps { type?: LoadingType } +interface LoadingPrivateProps { + locale: LocalizedString.Language; +} + +type Props = LoadingPublicProps & LoadingPrivateProps; + const LoadingPage = styled('div', { display: 'flex', flexDirection: 'column', @@ -24,17 +35,17 @@ const LoadingText = styled('div', { fontSize: '32px', }); -const LoadingErrorText = styled('div', (props: LoadingProps) => ({ +const LoadingErrorText = styled('div', (props: Props) => ({ paddingTop: props.height ? 2 * props.height : '100px', fontSize: '20px', whiteSpace: 'pre-wrap' })); -const Loading: React.FunctionComponent = (props) => { +const Loading: React.FunctionComponent = (props) => { return ( - {props.message ? props.message : 'Loading...'} + {props.message ? props.message : LocalizedString.lookup(tr('Loading...'), props.locale)} = (props) => { height={props.height ? props.height : 50} color={props.color ? props.color : '#4b64ad'} /> - + {props.errorMessage ? props.errorMessage : null} ); }; -export default Loading; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(Loading) as React.ComponentType; \ No newline at end of file diff --git a/src/components/MainMenu.tsx b/src/components/MainMenu.tsx index d1a189e8..6907d943 100644 --- a/src/components/MainMenu.tsx +++ b/src/components/MainMenu.tsx @@ -8,16 +8,27 @@ import { DARK, ThemeProps } from './theme'; import { faSignOutAlt } from '@fortawesome/free-solid-svg-icons'; -export interface MenuProps extends StyleProps, ThemeProps {} +import tr from '@i18n'; + +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; -interface MenuState {} - -type Props = MenuProps; -type State = MenuState; - import KIPR_LOGO_BLACK from '../assets/KIPR-Logo-Black-Text-Clear-Large.png'; import KIPR_LOGO_WHITE from '../assets/KIPR-Logo-White-Text-Clear-Large.png'; import { signOutOfApp } from '../firebase/modules/auth'; +import LocalizedString from '../util/LocalizedString'; + +export interface MenuPublicProps extends StyleProps, ThemeProps {} + +interface MenuPrivateProps { + locale: LocalizedString.Language; +} + +interface MenuState {} + +type Props = MenuPublicProps & MenuPrivateProps; +type State = MenuState; const Container = styled('div', (props: ThemeProps) => ({ backgroundColor: props.theme.backgroundColor, @@ -94,17 +105,19 @@ export class MainMenu extends React.Component { }; render() { - const { className, style } = this.props; + const { className, style, locale } = this.props; const theme = DARK; return ( {/* Dashboard */} - Logout + {LocalizedString.lookup(tr('Logout'), locale)} ); } } -export default MainMenu; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}))(MainMenu) as React.ComponentType; \ No newline at end of file diff --git a/src/components/NewSceneDialog.tsx b/src/components/NewSceneDialog.tsx index fe4bad0b..4fa58e6e 100644 --- a/src/components/NewSceneDialog.tsx +++ b/src/components/NewSceneDialog.tsx @@ -9,16 +9,26 @@ import SceneSettings from './SceneSettings'; import DialogBar from './DialogBar'; import { faPlus } from '@fortawesome/free-solid-svg-icons'; -export interface NewSceneDialogProps extends ThemeProps, StyleProps { +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; + +export interface NewSceneDialogPublicProps extends ThemeProps, StyleProps { onClose: () => void; onAccept: (scene: Scene) => void; } +interface NewSceneDialogPrivateProps { + locale: LocalizedString.Language; +} + interface NewSceneDialogState { scene: Scene; } -type Props = NewSceneDialogProps; +type Props = NewSceneDialogPublicProps & NewSceneDialogPrivateProps; type State = NewSceneDialogState; const StyledSceneSettings = styled(SceneSettings, ({ theme }: ThemeProps) => ({ @@ -41,20 +51,26 @@ class NewSceneDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose, onAccept } = props; + const { theme, onClose, onAccept, locale } = props; const { scene } = state; return ( - + - Create + {LocalizedString.lookup(tr('Create'), locale)} ); } } -export default NewSceneDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(NewSceneDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/OpenSceneDialog.tsx b/src/components/OpenSceneDialog.tsx index 67798d16..774a6ae5 100644 --- a/src/components/OpenSceneDialog.tsx +++ b/src/components/OpenSceneDialog.tsx @@ -19,17 +19,20 @@ import LocalizedString from '../util/LocalizedString'; import Author from '../db/Author'; import { auth } from '../firebase/firebase'; -export interface OpenSceneDialogProps extends ThemeProps { +import tr from '@i18n'; + +export interface OpenSceneDialogPublicProps extends ThemeProps { onClose: () => void; } -interface ReduxOpenSceneDialogProps { +interface OpenSceneDialogPrivateProps { scenes: Scenes; + locale: LocalizedString.Language; onSceneChange: (sceneId: string) => void; listUserScenes: () => void; } -type Props = OpenSceneDialogProps; +type Props = OpenSceneDialogPublicProps & OpenSceneDialogPrivateProps; interface SelectSceneDialogState { selectedSceneId: string | null; @@ -80,8 +83,8 @@ interface SectionProps { selected?: boolean; } -class OpenSceneDialog extends React.PureComponent { - constructor(props: Props & ReduxOpenSceneDialogProps) { +class OpenSceneDialog extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { selectedSceneId: null, @@ -92,7 +95,7 @@ class OpenSceneDialog extends React.PureComponent) { + componentDidUpdate(prevProps: Readonly) { // Check if selectedSceneId is not longer one of the scenes if (this.props.scenes !== prevProps.scenes) { if (!Object.prototype.hasOwnProperty.call(this.props.scenes, this.state.selectedSceneId)) { @@ -102,7 +105,7 @@ class OpenSceneDialog extends React.PureComponent + {loadedScenesArray.map(s => this.createSceneName(s[0], s[1]))} @@ -127,7 +130,7 @@ class OpenSceneDialog extends React.PureComponent - Accept + {LocalizedString.lookup(tr('Accept'), locale)} ); @@ -145,18 +148,18 @@ class OpenSceneDialog extends React.PureComponent { - const { theme } = this.props; + const { theme, locale } = this.props; const { selectedSceneId } = this.state; return ( this.onSceneClick(sceneId)}> - {LocalizedString.lookup(scene.name, LocalizedString.EN_US)} + {LocalizedString.lookup(scene.name, locale)} ); }; private createSceneInfo = (scene: AsyncScene) => { - const { theme } = this.props; + const { theme, locale } = this.props; let name: string; let description: string; @@ -166,27 +169,27 @@ class OpenSceneDialog extends React.PureComponentUnknown; + if (!value) return {LocalizedString.lookup(tr('Unknown'), locale)}; - name = LocalizedString.lookup(value.name, LocalizedString.EN_US); - description = LocalizedString.lookup(value.description, LocalizedString.EN_US); + name = LocalizedString.lookup(value.name, locale); + description = LocalizedString.lookup(value.description, locale); author = value.author; } else { - name = LocalizedString.lookup(brief.name, LocalizedString.EN_US); - description = LocalizedString.lookup(brief.description, LocalizedString.EN_US); + name = LocalizedString.lookup(brief.name, locale); + description = LocalizedString.lookup(brief.description, locale); author = brief.author; } return ( <> - {`Description: ${description}`} - {`Author: ${author.id === auth.currentUser.uid ? 'Me' : author.id}`} + {LocalizedString.lookup(tr('Description: '), locale)} {description} + {LocalizedString.lookup(tr('Author: '), locale)} {author.id === auth.currentUser.uid ? LocalizedString.lookup(tr('Me'), locale) : author.id} ); }; private createNoSceneInfo = () => { - return Select a scene to see more details; + return {LocalizedString.lookup(tr('Select a scene to see more details'), this.props.locale)}; }; private onSceneClick = (sceneId: string) => { @@ -198,9 +201,10 @@ class OpenSceneDialog extends React.PureComponent((state: ReduxState, ownProps) => ({ scenes: state.scenes, + locale: state.i18n.locale, }), (dispatch, b) => ({ onSceneChange: (sceneId: string) => { dispatch(push(`/scene/${sceneId}`)); }, listUserScenes: () => dispatch(ScenesAction.LIST_USER_SCENES), -}))(OpenSceneDialog) as React.ComponentType; \ No newline at end of file +}))(OpenSceneDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Root.tsx b/src/components/Root.tsx index a398ec04..90103183 100644 --- a/src/components/Root.tsx +++ b/src/components/Root.tsx @@ -10,12 +10,12 @@ import { styled } from 'styletron-react'; import { DARK, Theme } from './theme'; import { Layout, LayoutProps, OverlayLayout, OverlayLayoutRedux, SideLayoutRedux } from './Layout'; -import { SettingsDialog } from './SettingsDialog'; -import { AboutDialog } from './AboutDialog'; +import SettingsDialog from './SettingsDialog'; +import AboutDialog from './AboutDialog'; -import { FeedbackDialog } from './Feedback'; +import FeedbackDialog from './Feedback'; import { sendFeedback, FeedbackResponse } from './Feedback/SendFeedback'; -import { FeedbackSuccessDialog } from './Feedback/SuccessModal'; +import FeedbackSuccessDialog from './Feedback/SuccessModal'; import compile from '../compile'; import { SimulatorState } from './SimulatorState'; @@ -71,6 +71,8 @@ import DbError from '../db/Error'; import { applyObjectPatch, applyPatch, createObjectPatch, createPatch, ObjectPatch, OuterObjectPatch } from 'symmetry'; import DocumentationLocation from '../state/State/Documentation/DocumentationLocation'; +import tr from '@i18n'; + namespace Modal { export enum Type { Settings, @@ -184,6 +186,7 @@ interface RootPrivateProps { scene: AsyncScene; challenge?: AsyncChallenge; challengeCompletion?: AsyncChallengeCompletion; + locale: LocalizedString.Language; onNodeAdd: (id: string, node: Node) => void; onNodeRemove: (id: string) => void; @@ -286,7 +289,7 @@ class Root extends React.Component { }, modal: Modal.NONE, simulatorState: SimulatorState.STOPPED, - console: StyledText.text({ text: 'Welcome to the KIPR Simulator!\n', style: STDOUT_STYLE(DARK) }), + console: StyledText.text({ text: LocalizedString.lookup(tr('Welcome to the KIPR Simulator!\n'), props.locale), style: STDOUT_STYLE(DARK) }), theme: DARK, messages: [], settings: DEFAULT_SETTINGS, @@ -414,7 +417,8 @@ class Root extends React.Component { }; private onRunClick_ = () => { - const { state } = this; + const { props, state } = this; + const { locale } = props; const { activeLanguage, code, console, theme } = state; const activeCode = code[activeLanguage]; @@ -423,7 +427,7 @@ class Root extends React.Component { case 'c': case 'cpp': { let nextConsole: StyledText = StyledText.extend(console, StyledText.text({ - text: `Compiling...\n`, + text: LocalizedString.lookup(tr('Compiling...\n'), locale), style: STDOUT_STYLE(this.state.theme) })); @@ -450,7 +454,9 @@ class Root extends React.Component { // Show success in console and start running the program const haveWarnings = hasWarnings(messages); nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: `Compilation succeeded${haveWarnings ? ' with warnings' : ''}!\n`, + text: haveWarnings + ? LocalizedString.lookup(tr('Compilation succeeded with warnings.\n'), locale) + : LocalizedString.lookup(tr('Compilation succeeded.\n'), locale), style: STDOUT_STYLE(this.state.theme) })); @@ -469,7 +475,7 @@ class Root extends React.Component { } nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: `Compilation failed.\n`, + text: LocalizedString.lookup(tr('Compilation failed.\n'), locale), style: STDERR_STYLE(this.state.theme) })); } @@ -483,7 +489,7 @@ class Root extends React.Component { .catch((e: unknown) => { window.console.error(e); nextConsole = StyledText.extend(nextConsole, StyledText.text({ - text: 'Something went wrong during compilation.\n', + text: LocalizedString.lookup(tr('Something went wrong during compilation.\n'), locale), style: STDERR_STYLE(this.state.theme) })); @@ -890,6 +896,7 @@ export default connect((state: ReduxState, { match: { params: { sceneId, challen scene: Dict.unique(builder.scenes), challenge: Dict.unique(builder.challenges), challengeCompletion: Dict.unique(builder.challengeCompletions), + locale: state.i18n.locale, }; }, (dispatch, { match: { params: { sceneId } } }: RootPublicProps) => ({ onNodeAdd: (nodeId: string, node: Node) => dispatch(ScenesAction.setNode({ sceneId, nodeId, node })), diff --git a/src/components/SaveAsSceneDialog.tsx b/src/components/SaveAsSceneDialog.tsx index cadc2fe3..1907880f 100644 --- a/src/components/SaveAsSceneDialog.tsx +++ b/src/components/SaveAsSceneDialog.tsx @@ -10,18 +10,28 @@ import DialogBar from './DialogBar'; import { faPlus } from '@fortawesome/free-solid-svg-icons'; import deepNeq from '../deepNeq'; -export interface CopySceneDialogProps extends ThemeProps, StyleProps { +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; + +export interface CopySceneDialogPublicProps extends ThemeProps, StyleProps { scene: Scene; onClose: () => void; onAccept: (scene: Scene) => void; } +interface CopySceneDialogPrivateProps { + locale: LocalizedString.Language; +} + interface CopySceneDialogState { scene: Scene; } -type Props = CopySceneDialogProps; +type Props = CopySceneDialogPublicProps & CopySceneDialogPrivateProps; type State = CopySceneDialogState; const StyledSceneSettings = styled(SceneSettings, ({ theme }: ThemeProps) => ({ @@ -38,7 +48,7 @@ class SaveAsSceneDialog extends React.PureComponent { }; } - componentDidUpdate(prevProps: Readonly, prevState: Readonly): void { + componentDidUpdate(prevProps: Readonly, prevState: Readonly): void { if (deepNeq(prevProps.scene.name, this.props.scene.name) || deepNeq(prevProps.scene.description, this.props.scene.description)) { this.setState({ scene: this.props.scene }); } @@ -50,20 +60,26 @@ class SaveAsSceneDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose, onAccept } = props; + const { theme, onClose, onAccept, locale } = props; const { scene } = state; return ( - + - Create + {LocalizedString.lookup(tr('Create'), locale)} ); } } -export default SaveAsSceneDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(SaveAsSceneDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/SceneErrorDialog.tsx b/src/components/SceneErrorDialog.tsx index f369cd8e..5d73c379 100644 --- a/src/components/SceneErrorDialog.tsx +++ b/src/components/SceneErrorDialog.tsx @@ -5,13 +5,25 @@ import { Dialog } from './Dialog'; import DialogBar from './DialogBar'; import { ThemeProps } from './theme'; -interface SceneErrorDialogProps extends ThemeProps { +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; + +import { connect } from 'react-redux'; +import { State as ReduxState } from '../state'; +import Dict from '../Dict'; +import { sprintf } from 'sprintf-js'; + +interface SceneErrorDialogPublicProps extends ThemeProps { error: Async.Error; onClose: () => void; } -type Props = SceneErrorDialogProps; +interface SceneErrorDialogPrivateProps { + locale: LocalizedString.Language; +} + +type Props = SceneErrorDialogPublicProps & SceneErrorDialogPrivateProps; const Container = styled('div', (props: ThemeProps) => ({ })); @@ -25,17 +37,21 @@ const Message = styled('div', (props: ThemeProps) => ({ class SceneErrorDialog extends React.Component { render() { const { props } = this; - const { error, onClose, theme } = props; + const { error, onClose, theme, locale } = props; return ( - + sprintf(str, error.code)), locale)} + onClose={onClose} + > {error.message} - Closing this dialog will take you back to the last well-known state. - If this error persists, please submit feedback. + {LocalizedString.lookup(tr('Closing this dialog will take you back to the last well-known state.'), locale)} + {LocalizedString.lookup(tr('If this error persists, please submit feedback.'), locale)} @@ -43,4 +59,6 @@ class SceneErrorDialog extends React.Component { } } -export default SceneErrorDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(SceneErrorDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/SceneSettings.tsx b/src/components/SceneSettings.tsx index c0911bfa..5855e374 100644 --- a/src/components/SceneSettings.tsx +++ b/src/components/SceneSettings.tsx @@ -8,12 +8,22 @@ import Field from './Field'; import Input from './Input'; import { ThemeProps } from './theme'; -export interface SceneSettingsProps extends StyleProps, ThemeProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; + +export interface SceneSettingsPublicProps extends StyleProps, ThemeProps { scene: Scene; onSceneChange: (scene: Scene) => void; } -type Props = SceneSettingsProps; +interface SceneSettingsPrivateProps { + locale: LocalizedString.Language; +} + +type Props = SceneSettingsPublicProps & SceneSettingsPrivateProps; const Container = styled('div', { display: 'flex', @@ -23,42 +33,48 @@ const Container = styled('div', { class SceneSettings extends React.Component { private onNameChange_ = (event: React.SyntheticEvent) => { const { props } = this; - const { scene, onSceneChange } = props; + const { scene, onSceneChange, locale } = props; onSceneChange({ ...scene, - name: { [LocalizedString.EN_US]: event.currentTarget.value } + name: { + ...(scene.name || {}), + [locale]: event.currentTarget.value + } }); }; private onDescriptionChange_ = (event: React.SyntheticEvent) => { const { props } = this; - const { scene, onSceneChange } = props; + const { scene, onSceneChange, locale } = props; onSceneChange({ ...scene, - description: { [LocalizedString.EN_US]: event.currentTarget.value } + description: { + ...(scene.description || {}), + [locale]: event.currentTarget.value + } }); }; render() { const { props } = this; - const { scene, style, className, theme } = props; + const { scene, style, className, theme, locale } = props; return ( - + - + @@ -67,4 +83,6 @@ class SceneSettings extends React.Component { } } -export default SceneSettings; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(SceneSettings) as React.ComponentType; \ No newline at end of file diff --git a/src/components/SceneSettingsDialog.tsx b/src/components/SceneSettingsDialog.tsx index c3c050ce..47b0f9ef 100644 --- a/src/components/SceneSettingsDialog.tsx +++ b/src/components/SceneSettingsDialog.tsx @@ -10,18 +10,29 @@ import DialogBar from './DialogBar'; import { faCheck } from '@fortawesome/free-solid-svg-icons'; import deepNeq from '../deepNeq'; -export interface SceneSettingsDialogProps extends ThemeProps, StyleProps { +import tr from '@i18n'; + +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; +import LocalizedString from '../util/LocalizedString'; + +export interface SceneSettingsDialogPublicProps extends ThemeProps, StyleProps { scene: Scene; onClose: () => void; onAccept: (scene: Scene) => void; } +interface SceneSettingsDialogPrivateProps { + locale: LocalizedString.Language; +} + interface SceneSettingsDialogState { scene: Scene; } -type Props = SceneSettingsDialogProps; +type Props = SceneSettingsDialogPublicProps & SceneSettingsDialogPrivateProps; type State = SceneSettingsDialogState; const StyledSceneSettings = styled(SceneSettings, ({ theme }: ThemeProps) => ({ @@ -38,7 +49,7 @@ class SceneSettingsDialog extends React.PureComponent { }; } - componentDidUpdate(prevProps: Readonly, prevState: Readonly): void { + componentDidUpdate(prevProps: Readonly, prevState: Readonly): void { if (deepNeq(prevProps.scene.name, this.props.scene.name) || deepNeq(prevProps.scene.description, this.props.scene.description)) { this.setState({ scene: this.props.scene }); } @@ -50,20 +61,26 @@ class SceneSettingsDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose } = props; + const { theme, onClose, locale } = props; const { scene } = state; return ( - + - Accept + {LocalizedString.lookup(tr('Accept'), locale)} ); } } -export default SceneSettingsDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(SceneSettingsDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/SettingsDialog.tsx b/src/components/SettingsDialog.tsx index 29fd760b..cfb10753 100644 --- a/src/components/SettingsDialog.tsx +++ b/src/components/SettingsDialog.tsx @@ -7,19 +7,33 @@ import ScrollArea from './ScrollArea'; import { Switch } from './Switch'; import { ThemeProps } from './theme'; -type SettingsSection = 'simulation' | 'editor'; +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import ComboBox from './ComboBox'; +import Dict from '../Dict'; -export interface SettingsDialogProp extends ThemeProps, StyleProps { +import { State as ReduxState } from '../state'; +import { I18nAction } from '../state/reducer'; +import { connect } from 'react-redux'; + +type SettingsSection = 'user-interface' | 'simulation' | 'editor'; + +export interface SettingsDialogPublicProps extends ThemeProps, StyleProps { onClose: () => void; settings: Settings; onSettingsChange: (settings: Partial) => void; } +interface SettingsDialogPrivateProps { + locale: LocalizedString.Language; + onLocaleChange: (locale: LocalizedString.Language) => void; +} + interface SettingsDialogState { selectedSection: SettingsSection; } -type Props = SettingsDialogProp; +type Props = SettingsDialogPublicProps & SettingsDialogPrivateProps; type State = SettingsDialogState; const Container = styled('div', (props: ThemeProps) => ({ @@ -76,11 +90,23 @@ interface SectionProps { selected?: boolean; } -export class SettingsDialog extends React.PureComponent { +const LOCALE_OPTIONS: ComboBox.Option[] = (() => { + const ret: ComboBox.Option[] = []; + for (const locale of [LocalizedString.EN_US]) { + ret.push(ComboBox.option(LocalizedString.NATIVE_LOCALE_NAMES[locale], locale)); + } + return ret; +})(); + +const StyledComboBox = styled(ComboBox, { + flex: '1 1', +}); + +class SettingsDialog extends React.PureComponent { constructor(props: Props) { super(props); this.state = { - selectedSection: 'simulation', + selectedSection: 'user-interface', }; } @@ -104,30 +130,74 @@ export class SettingsDialog extends React.PureComponent { ); }; + private onLocaleSelect_ = (index: number, option: ComboBox.Option) => { + this.props.onLocaleChange(option.data as LocalizedString.Language); + }; + + render() { const { props, state } = this; - const { style, className, theme, onClose } = props; + const { style, className, theme, onClose, locale } = props; const { selectedSection } = state; return ( - - + + - this.setSelectedSection('simulation')}>Simulation - this.setSelectedSection('editor')}>Editor + this.setSelectedSection('user-interface')} + > + {LocalizedString.lookup(tr('User Interface'), locale)} + + this.setSelectedSection('simulation')} + > + {LocalizedString.lookup(tr('Simulation'), locale)} + + this.setSelectedSection('editor')} + > + {LocalizedString.lookup(tr('Editor'), locale)} + + {selectedSection === 'user-interface' && ( + <> + + + {LocalizedString.lookup(tr('Locale'), locale)} + {LocalizedString.lookup(tr('Switch languages'), locale)} + + opt.data === locale)} + onSelect={this.onLocaleSelect_} + theme={theme} + /> + + + )} {selectedSection === 'simulation' && ( <> {this.createBooleanSetting( - 'Sensor noise', - 'Controls whether sensor outputs are affected by random noise', + LocalizedString.lookup(tr('Sensor noise'), locale), + LocalizedString.lookup(tr('Controls whether sensor outputs are affected by random noise'), locale), (settings: Settings) => settings.simulationSensorNoise, (newValue: boolean) => ({ simulationSensorNoise: newValue }) )} {this.createBooleanSetting( - 'Realistic sensors', - 'Controls whether sensors behave like real-world sensors instead of like ideal sensors. For example, real-world ET sensors are nonlinear', + LocalizedString.lookup(tr('Realistic sensors'), locale), + LocalizedString.lookup(tr('Controls whether sensors behave like real-world sensors instead of like ideal sensors. For example, real-world ET sensors are nonlinear'), locale), (settings: Settings) => settings.simulationRealisticSensors, (newValue: boolean) => ({ simulationRealisticSensors: newValue }) )} @@ -136,8 +206,8 @@ export class SettingsDialog extends React.PureComponent { {selectedSection === 'editor' && ( <> {this.createBooleanSetting( - 'Autocomplete', - 'Controls autocompletion of code, brackets, and quotes', + LocalizedString.lookup(tr('Autocomplete'), locale), + LocalizedString.lookup(tr('Controls autocompletion of code, brackets, and quotes'), locale), (settings: Settings) => settings.editorAutoComplete, (newValue: boolean) => ({ editorAutoComplete: newValue }) )} @@ -148,4 +218,10 @@ export class SettingsDialog extends React.PureComponent { ); } -} \ No newline at end of file +} + +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}), dispatch => ({ + onLocaleChange: (locale: LocalizedString.Language) => dispatch(I18nAction.setLocale({ locale })), +}))(SettingsDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/SimMenu.tsx b/src/components/SimMenu.tsx index 9ddf77af..cac9f815 100644 --- a/src/components/SimMenu.tsx +++ b/src/components/SimMenu.tsx @@ -8,6 +8,19 @@ import { Layout, LayoutPicker } from './Layout'; import { SimulatorState } from './SimulatorState'; import { GREEN, RED, ThemeProps } from './theme'; +import tr from '@i18n'; + +import { connect } from 'react-redux'; + +import { State as ReduxState } from '../state'; + +import KIPR_LOGO_BLACK from '../assets/KIPR-Logo-Black-Text-Clear-Large.png'; +import KIPR_LOGO_WHITE from '../assets/KIPR-Logo-White-Text-Clear-Large.png'; +import { faBars, faBook, faClone, faCogs, faCommentDots, faGlobeAmericas, faPlay, faQuestion, faSignOutAlt, faStop, faSync } from '@fortawesome/free-solid-svg-icons'; +import SceneMenu from './World/SceneMenu'; +import ExtraMenu from './ExtraMenu'; +import LocalizedString from '../util/LocalizedString'; + namespace SubMenu { export enum Type { None, @@ -43,7 +56,7 @@ namespace SubMenu { type SubMenu = SubMenu.None | SubMenu.LayoutPicker | SubMenu.SceneMenu | SubMenu.ExtraMenu; -export interface MenuProps extends StyleProps, ThemeProps { +export interface MenuPublicProps extends StyleProps, ThemeProps { layout: Layout; onLayoutChange: (layout: Layout) => void; @@ -72,19 +85,17 @@ export interface MenuProps extends StyleProps, ThemeProps { simulatorState: SimulatorState; } +interface MenuPrivateProps { + locale: LocalizedString.Language; +} + interface MenuState { subMenu: SubMenu; } -type Props = MenuProps; +type Props = MenuPublicProps & MenuPrivateProps; type State = MenuState; -import KIPR_LOGO_BLACK from '../assets/KIPR-Logo-Black-Text-Clear-Large.png'; -import KIPR_LOGO_WHITE from '../assets/KIPR-Logo-White-Text-Clear-Large.png'; -import { faBars, faBook, faClone, faCogs, faCommentDots, faGlobeAmericas, faPlay, faQuestion, faSignOutAlt, faStop, faSync } from '@fortawesome/free-solid-svg-icons'; -import SceneMenu from './World/SceneMenu'; -import ExtraMenu from './ExtraMenu'; - const Container = styled('div', (props: ThemeProps) => ({ backgroundColor: props.theme.backgroundColor, color: props.theme.color, @@ -242,7 +253,8 @@ class SimMenu extends React.PureComponent { onSaveAsSceneClick: onCopySceneClick, onSettingsSceneClick, onDeleteSceneClick, - simulatorState + simulatorState, + locale } = props; const { subMenu } = state; @@ -255,7 +267,7 @@ class SimMenu extends React.PureComponent { disabled={false} > - Stop + {LocalizedString.lookup(tr('Stop', 'Terminate program execution'), locale)} ) : ( { style={{ borderLeft: `1px solid ${theme.borderColor}` }} > - Run + {LocalizedString.lookup(tr('Run', 'Begin program execution'), locale)} ); @@ -275,12 +287,14 @@ class SimMenu extends React.PureComponent { {runOrStopItem} - Reset World + + {LocalizedString.lookup(tr('Reset World'), locale)} + - Layout + {LocalizedString.lookup(tr('Layout'), locale)} {subMenu.type === SubMenu.Type.LayoutPicker ? ( { - World + {LocalizedString.lookup(tr('World'), locale)} {subMenu.type === SubMenu.Type.SceneMenu ? ( { } } -export default SimMenu; +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(SimMenu) as React.ComponentType; diff --git a/src/components/SimulatorArea.tsx b/src/components/SimulatorArea.tsx index a56ec951..9eace61a 100644 --- a/src/components/SimulatorArea.tsx +++ b/src/components/SimulatorArea.tsx @@ -11,6 +11,11 @@ import Loading from './Loading'; import MotorsSwappedDialog from './MotorsSwappedDialog'; import { Theme } from './theme'; +import LocalizedString from '../util/LocalizedString'; +import tr from '@i18n'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../state'; + namespace ModalDialog { export enum Type { None, @@ -59,12 +64,18 @@ namespace ModalDialog { type ModalDialog = ModalDialog.None | ModalDialog.MotorsSwapped; -export interface SimulatorAreaProps { +export interface SimulatorAreaPublicProps { theme: Theme; isSensorNoiseEnabled: boolean; isRealisticSensorsEnabled: boolean; } +interface SimulatorAreaPrivateProps { + locale: LocalizedString.Language; +} + +type Props = SimulatorAreaPublicProps & SimulatorAreaPrivateProps; + interface SimulatorAreaState { loading: boolean; loadingMessage: string; @@ -85,11 +96,11 @@ const Canvas = styled('canvas', { touchAction: 'none', }); -export class SimulatorArea extends React.Component { +export class SimulatorArea extends React.Component { private containerRef_: HTMLDivElement; private canvasRef_: HTMLCanvasElement; - constructor(props: SimulatorAreaProps) { + constructor(props: Props) { super(props); this.state = { loading: true, @@ -104,13 +115,17 @@ export class SimulatorArea extends React.Component { if (this.state.loading) { - this.setState({ loadingMessage: 'This process is taking longer than expected...\nIf you have a poor internet connection, this can take some time' }); + this.setState({ + loadingMessage: LocalizedString.lookup(tr('This process is taking longer than expected...\nIf you have a poor internet connection, this can take some time'), this.props.locale) + }); } }, 30 * 1000); // 120 second message: likely failed setTimeout(() => { if (this.state.loading) { - this.setState({ loadingMessage: 'The simulator may have failed to load.\nPlease submit a feedback form to let us know!' }); + this.setState({ + loadingMessage: LocalizedString.lookup(tr('The simulator may have failed to load.\nPlease submit a feedback form to let us know!'), this.props.locale) + }); } }, 120 * 1000); @@ -149,7 +164,7 @@ export class SimulatorArea extends React.Component @@ -199,3 +214,7 @@ export class SimulatorArea extends React.Component ({ + locale: state.i18n.locale, +}))(SimulatorArea) as React.ComponentType; diff --git a/src/components/TabBar.tsx b/src/components/TabBar.tsx index 629430c5..3eb898c0 100644 --- a/src/components/TabBar.tsx +++ b/src/components/TabBar.tsx @@ -42,7 +42,9 @@ const TabText = styled('div', (props: { $vertical: boolean }) => ({ transform: (props.$vertical) ? 'translate(-50%, -50%) rotate(-90deg)' : 'translate(-50%, -50%)', transformOrigin: 'center', textAlign: 'center', - display: 'flex' + display: 'flex', + wordBreak: 'keep-all', + whiteSpace: 'nowrap', })); export class Tab extends React.PureComponent { @@ -75,6 +77,7 @@ const TabBarContainer = styled('div', (props: ThemeProps & { $vertical: boolean flexDirection: (props.$vertical) ? 'column' : 'row' , backgroundColor: props.theme.backgroundColor, color: props.theme.color, + })); export class TabBar extends React.PureComponent { diff --git a/src/components/ValueEdit/index.tsx b/src/components/ValueEdit/index.tsx index 31f66e62..a202bcc7 100644 --- a/src/components/ValueEdit/index.tsx +++ b/src/components/ValueEdit/index.tsx @@ -5,14 +5,24 @@ import { Angle, Distance, EMPTY_OBJECT, Mass, Slow, Value } from '../../util'; import { ThemeProps } from '../theme'; import Field from '../Field'; import ComboBox from '../ComboBox'; +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; -export interface ValueEditProps extends ThemeProps, StyleProps { +export interface ValueEditPublicProps extends ThemeProps, StyleProps { name: string; long?: boolean; value: Value; onValueChange: (value: Value) => void; } +interface ValueEditPrivateProps { + locale: LocalizedString.Language; +} + + + interface ValueEditState { input: string; hasFocus: boolean; @@ -20,7 +30,7 @@ interface ValueEditState { unitFocus: boolean; } -type Props = ValueEditProps; +type Props = ValueEditPublicProps & ValueEditPrivateProps; type State = ValueEditState; const SubContainer = styled('div', (props: ThemeProps) => ({ @@ -69,30 +79,7 @@ const StyledComboBox = styled(ComboBox, (props: ThemeProps) => ({ const NUMBER_REGEX = /^[+-]?([0-9]*[.])?[0-9]+$/; -const MASS_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('grams', Mass.Type.Grams), - ComboBox.option('kilograms', Mass.Type.Kilograms), - ComboBox.option('pounds', Mass.Type.Pounds), - ComboBox.option('ounces', Mass.Type.Ounces), -]; - -const DISTANCE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('meters', 'meters'), - ComboBox.option('centimeters', 'centimeters'), - ComboBox.option('feet', 'feet'), - ComboBox.option('inches', 'inches'), -]; - -const ANGLE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('radians', Angle.Type.Radians), - ComboBox.option('degrees', Angle.Type.Degrees), -]; -const VALUE_OPTIONS: { [key: number]: ComboBox.Option[] } = { - [Value.Type.Angle]: ANGLE_OPTIONS, - [Value.Type.Distance]: DISTANCE_OPTIONS, - [Value.Type.Mass]: MASS_OPTIONS, -}; @@ -184,12 +171,37 @@ export class ValueEdit extends React.PureComponent { render() { const { props, state } = this; - const { theme, style, className, name, value, long } = props; + const { theme, style, className, name, value, long, locale } = props; const { input, unitFocus } = state; const errorStyle: React.CSSProperties = { backgroundColor: !state.valid ? `rgba(255, 0, 0, 0.2)` : undefined, }; + const massOptions: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('grams'), locale), Mass.Type.Grams), + ComboBox.option(LocalizedString.lookup(tr('kilograms'), locale), Mass.Type.Kilograms), + ComboBox.option(LocalizedString.lookup(tr('pounds'), locale), Mass.Type.Pounds), + ComboBox.option(LocalizedString.lookup(tr('ounces'), locale), Mass.Type.Ounces), + ]; + + const distanceOptions: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('meters'), locale), 'meters'), + ComboBox.option(LocalizedString.lookup(tr('centimeters'), locale), 'centimeters'), + ComboBox.option(LocalizedString.lookup(tr('feet'), locale), 'feet'), + ComboBox.option(LocalizedString.lookup(tr('inches'), locale), 'inches'), + ]; + + const angleOptions: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('radians'), locale), Angle.Type.Radians), + ComboBox.option(LocalizedString.lookup(tr('degrees'), locale), Angle.Type.Degrees), + ]; + + const VALUE_OPTIONS: { [key: number]: ComboBox.Option[] } = { + [Value.Type.Angle]: angleOptions, + [Value.Type.Distance]: distanceOptions, + [Value.Type.Mass]: massOptions, + }; + const unitOptions = VALUE_OPTIONS[value.type]; return ( @@ -223,4 +235,6 @@ export class ValueEdit extends React.PureComponent { } } -export default ValueEdit; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(ValueEdit) as React.ComponentType; \ No newline at end of file diff --git a/src/components/Widget.tsx b/src/components/Widget.tsx index 948b8bd0..75bca5bd 100644 --- a/src/components/Widget.tsx +++ b/src/components/Widget.tsx @@ -159,7 +159,9 @@ const Title = styled('span', (props: ThemeProps & { $hasComponents: boolean }) = userSelect: 'none', paddingRight: props.$hasComponents ? `${props.theme.itemPadding}px` : undefined, marginRight: props.$hasComponents ? `${props.theme.itemPadding}px` : undefined, - borderRight: props.$hasComponents ? `1px solid ${props.theme.borderColor}` : undefined + borderRight: props.$hasComponents ? `1px solid ${props.theme.borderColor}` : undefined, + wordBreak: 'keep-all', + whiteSpace: 'nowrap', })); const sizeIcon = (size: Size): IconProp => { diff --git a/src/components/World/AddNodeDialog.tsx b/src/components/World/AddNodeDialog.tsx index ef6a8531..47b8933a 100644 --- a/src/components/World/AddNodeDialog.tsx +++ b/src/components/World/AddNodeDialog.tsx @@ -22,18 +22,25 @@ import { Fa } from "../Fa"; import { faCheck } from '@fortawesome/free-solid-svg-icons'; import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; export interface AddNodeAcceptance { node: Node; geometry?: Geometry; } -export interface AddNodeDialogProps extends ThemeProps { +export interface AddNodeDialogPublicProps extends ThemeProps { scene: Scene; onAccept: (acceptance: AddNodeAcceptance) => void; onClose: () => void; } +interface AddNodeDialogPrivateProps { + locale: LocalizedString.Language; +} + interface AddNodeDialogState { id: string; node: Node; @@ -42,7 +49,7 @@ interface AddNodeDialogState { geometry: Geometry; } -type Props = AddNodeDialogProps; +type Props = AddNodeDialogPublicProps & AddNodeDialogPrivateProps; type State = AddNodeDialogState; const StyledScrollArea = styled(ScrollArea, (props: ThemeProps) => ({ @@ -73,7 +80,7 @@ class AddNodeDialog extends React.PureComponent { node: { type: 'from-template', templateId: 'can', - name: { [LocalizedString.EN_US]: 'Unnamed Object' }, + name: tr('Unnamed Object'), startingOrigin: origin, origin, editable: true, @@ -131,7 +138,7 @@ class AddNodeDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose, scene } = props; + const { theme, onClose, scene, locale } = props; const { node, id } = state; // If there's a geometry in progress, create a temporary scene containing the geometry @@ -144,7 +151,7 @@ class AddNodeDialog extends React.PureComponent { }; return ( - + { /> - Accept + {LocalizedString.lookup(tr('Accept'), locale)} ); } } -export default AddNodeDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(AddNodeDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/AddScriptDialog.tsx b/src/components/World/AddScriptDialog.tsx index 15e34dd8..9ef27c01 100644 --- a/src/components/World/AddScriptDialog.tsx +++ b/src/components/World/AddScriptDialog.tsx @@ -20,21 +20,30 @@ import { Fa } from "../Fa"; import { faCheck } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; + export interface AddScriptAcceptance { script: Script; } -export interface AddScriptDialogProps extends ThemeProps { +export interface AddScriptDialogPublicProps extends ThemeProps { onAccept: (acceptance: AddScriptAcceptance) => void; onClose: () => void; } +interface AddScriptDialogPrivateProps { + locale: LocalizedString.Language; +} + interface AddScriptDialogState { id: string; script: Script; } -type Props = AddScriptDialogProps; +type Props = AddScriptDialogPublicProps & AddScriptDialogPrivateProps; type State = AddScriptDialogState; const InnerContainer = styled('div', () => ({ @@ -67,11 +76,11 @@ class AddScriptDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose } = props; + const { theme, onClose, locale } = props; const { script, id } = state; return ( - + { /> - Accept + {LocalizedString.lookup(tr('Accept'), locale)} ); } } -export default AddScriptDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(AddScriptDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/NodeSettings.tsx b/src/components/World/NodeSettings.tsx index b7dc42a1..ff8e36fe 100644 --- a/src/components/World/NodeSettings.tsx +++ b/src/components/World/NodeSettings.tsx @@ -27,6 +27,8 @@ import Robot from '../../state/State/Robot'; import { connect } from 'react-redux'; import Async from '../../state/State/Async'; +import tr from '@i18n'; + export interface NodeSettingsPublicProps extends ThemeProps { onNodeChange: (node: Node) => void; onNodeOriginChange: (origin: ReferenceFrame) => void; @@ -42,6 +44,7 @@ export interface NodeSettingsPublicProps extends ThemeProps { interface NodeSettingsPrivateProps { robots: Dict, Robot>>; + locale: LocalizedString.Language; } interface NodeSettingsState { @@ -77,104 +80,6 @@ const StyledScrollArea = styled(ScrollArea, (props: ThemeProps) => ({ flex: '1 1', })); -const GEOMETRY_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Box', 'box'), - ComboBox.option('Sphere', 'sphere'), - ComboBox.option('Cylinder', 'cylinder'), - ComboBox.option('Cone', 'cone'), - ComboBox.option('Plane', 'plane'), - ComboBox.option('File', 'file'), -]; - -const GEOMETRY_REVERSE_OPTIONS: Dict = GEOMETRY_OPTIONS.reduce((dict, option, i) => { - dict[option.data as string] = i; - return dict; -}, {}); - - -const TEMPLATE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Can', 'can'), - ComboBox.option('Paper Ream', 'ream'), -]; - -const TEMPLATE_REVERSE_OPTIONS: Dict = TEMPLATE_OPTIONS.reduce((dict, option, i) => { - dict[option.data as string] = i; - return dict; -}, {}); - -const ROTATION_TYPES: ComboBox.Option[] = [ - ComboBox.option('Euler', 'euler'), - ComboBox.option('Axis Angle', 'angle-axis'), -]; - -const EULER_ORDER_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('XYZ', 'xyz'), - ComboBox.option('YZX', 'yzx'), - ComboBox.option('ZXY', 'zxy'), - ComboBox.option('XZY', 'xzy'), - ComboBox.option('YXZ', 'yxz'), - ComboBox.option('ZYX', 'zyx'), -]; - -const NODE_TYPE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Empty', 'empty'), - ComboBox.option('Standard Object', 'from-template'), - ComboBox.option('Custom Object', 'object'), - // ComboBox.option('Directional Light', 'directional-light'), - ComboBox.option('Point Light', 'point-light'), - // ComboBox.option('Spot Light', 'spot-light'), -]; - -const NODE_TYPE_OPTIONS_REV = (() => { - const map: Record = {}; - NODE_TYPE_OPTIONS.forEach((option, i) => { - map[option.data as string] = i; - }); - return map; -})(); - -const MATERIAL_TYPE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Unset', 'unset'), - ComboBox.option('Basic', 'basic'), - // ComboBox.option('PBR', 'pbr'), -]; - -const MATERIAL_TYPE_OPTIONS_REV = (() => { - const map: Record = {}; - MATERIAL_TYPE_OPTIONS.forEach((option, i) => { - map[option.data as string] = i; - }); - return map; -})(); - -const MATERIAL_SOURCE3_TYPE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Unset', 'unset'), - ComboBox.option('RGB', 'color3'), - ComboBox.option('Texture', 'texture'), -]; - -const MATERIAL_SOURCE3_TYPE_OPTIONS_REV = (() => { - const map: Record = {}; - MATERIAL_SOURCE3_TYPE_OPTIONS.forEach((option, i) => { - map[option.data as string] = i; - }); - return map; -})(); - -const MATERIAL_SOURCE1_TYPE_OPTIONS: ComboBox.Option[] = [ - ComboBox.option('Unset', 'unset'), - ComboBox.option('Value', 'color1'), - ComboBox.option('Texture', 'texture'), -]; - -const MATERIAL_SOURCE1_TYPE_OPTIONS_REV = (() => { - const map: Record = {}; - MATERIAL_SOURCE3_TYPE_OPTIONS.forEach((option, i) => { - map[option.data as string] = i; - }); - return map; -})(); - class NodeSettings extends React.PureComponent { constructor(props: Props) { super(props); @@ -224,12 +129,15 @@ class NodeSettings extends React.PureComponent { private onNameChange_ = (event: React.SyntheticEvent) => { this.props.onNodeChange({ ...this.props.node, - name: { [LocalizedString.EN_US]: event.currentTarget.value } + name: { + ...this.props.node.name, + [this.props.locale]: event.currentTarget.value + } }); }; private onTypeSelect_ = (index: number, option: ComboBox.Option) => { - const { node } = this.props; + const { node, locale } = this.props; // If the type didn't change, do nothing const selectedType = option.data as Node.Type; @@ -239,6 +147,11 @@ class NodeSettings extends React.PureComponent { let transmutedNode = Node.transmute(node, selectedType); + const TEMPLATE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Can'), locale), 'can'), + ComboBox.option(LocalizedString.lookup(tr('Paper Ream'), locale), 'ream'), + ]; + // If the new type is from a template, set the template ID to a default value if (transmutedNode.type === 'from-template') { const defaultTemplateId = TEMPLATE_OPTIONS[0].data as string; @@ -928,7 +841,7 @@ class NodeSettings extends React.PureComponent { render() { const { props, state } = this; - const { theme, node, scene, id, robots } = props; + const { theme, node, scene, id, robots, locale } = props; const { collapsed } = state; // const { parentId } = node; @@ -966,16 +879,114 @@ class NodeSettings extends React.PureComponent { const robotOptions: ComboBox.Option[] = Dict.toList(robots) .map(([id, robot]) => ([id, Async.latestValue(robot)])) .filter(([, robot]: [string, Robot]) => robot !== undefined) - .map(([id, robot]: [string, Robot]) => ComboBox.option(LocalizedString.lookup(robot.name, LocalizedString.EN_US), id)); + .map(([id, robot]: [string, Robot]) => ComboBox.option(LocalizedString.lookup(robot.name, locale), id)); + + const GEOMETRY_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Box'), locale), 'box'), + ComboBox.option(LocalizedString.lookup(tr('Sphere'), locale), 'sphere'), + ComboBox.option(LocalizedString.lookup(tr('Cylinder'), locale), 'cylinder'), + ComboBox.option(LocalizedString.lookup(tr('Cone'), locale), 'cone'), + ComboBox.option(LocalizedString.lookup(tr('Plane'), locale), 'plane'), + ComboBox.option(LocalizedString.lookup(tr('File'), locale), 'file'), + ]; + + const GEOMETRY_REVERSE_OPTIONS: Dict = GEOMETRY_OPTIONS.reduce((dict, option, i) => { + dict[option.data as string] = i; + return dict; + }, {}); + + + const TEMPLATE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Can'), locale), 'can'), + ComboBox.option(LocalizedString.lookup(tr('Paper Ream'), locale), 'ream'), + ]; + + const TEMPLATE_REVERSE_OPTIONS: Dict = TEMPLATE_OPTIONS.reduce((dict, option, i) => { + dict[option.data as string] = i; + return dict; + }, {}); + + const ROTATION_TYPES: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Euler'), locale), 'euler'), + ComboBox.option(LocalizedString.lookup(tr('Axis Angle'), locale), 'angle-axis'), + ]; + + const EULER_ORDER_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('XYZ', 'Rotation order'), locale), 'xyz'), + ComboBox.option(LocalizedString.lookup(tr('YZX', 'Rotation order'), locale), 'yzx'), + ComboBox.option(LocalizedString.lookup(tr('ZXY', 'Rotation order'), locale), 'zxy'), + ComboBox.option(LocalizedString.lookup(tr('XZY', 'Rotation order'), locale), 'xzy'), + ComboBox.option(LocalizedString.lookup(tr('YXZ', 'Rotation order'), locale), 'yxz'), + ComboBox.option(LocalizedString.lookup(tr('ZYX', 'Rotation order'), locale), 'zyx'), + ]; + + const NODE_TYPE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Empty'), locale), 'empty'), + ComboBox.option(LocalizedString.lookup(tr('Standard Object'), locale), 'from-template'), + ComboBox.option(LocalizedString.lookup(tr('Custom Object'), locale), 'object'), + // ComboBox.option('Directional Light', 'directional-light'), + ComboBox.option(LocalizedString.lookup(tr('Point Light'), locale), 'point-light'), + // ComboBox.option('Spot Light', 'spot-light'), + ]; + + const NODE_TYPE_OPTIONS_REV = (() => { + const map: Record = {}; + NODE_TYPE_OPTIONS.forEach((option, i) => { + map[option.data as string] = i; + }); + return map; + })(); + + const MATERIAL_TYPE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Unset'), locale), 'unset'), + ComboBox.option(LocalizedString.lookup(tr('Basic'), locale), 'basic'), + // ComboBox.option('PBR', 'pbr'), + ]; + + const MATERIAL_TYPE_OPTIONS_REV = (() => { + const map: Record = {}; + MATERIAL_TYPE_OPTIONS.forEach((option, i) => { + map[option.data as string] = i; + }); + return map; + })(); + + const MATERIAL_SOURCE3_TYPE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Unset'), locale), 'unset'), + ComboBox.option(LocalizedString.lookup(tr('RGB', 'Red, Green, Blue'), locale), 'color3'), + ComboBox.option(LocalizedString.lookup(tr('Texture'), locale), 'texture'), + ]; + + const MATERIAL_SOURCE3_TYPE_OPTIONS_REV = (() => { + const map: Record = {}; + MATERIAL_SOURCE3_TYPE_OPTIONS.forEach((option, i) => { + map[option.data as string] = i; + }); + return map; + })(); + + const MATERIAL_SOURCE1_TYPE_OPTIONS: ComboBox.Option[] = [ + ComboBox.option(LocalizedString.lookup(tr('Unset'), locale), 'unset'), + ComboBox.option(LocalizedString.lookup(tr('Value'), locale), 'color1'), + ComboBox.option(LocalizedString.lookup(tr('Texture'), locale), 'texture'), + ]; + + const MATERIAL_SOURCE1_TYPE_OPTIONS_REV = (() => { + const map: Record = {}; + MATERIAL_SOURCE3_TYPE_OPTIONS.forEach((option, i) => { + map[option.data as string] = i; + }); + return map; + })(); return ( -
- +
+ @@ -984,7 +995,7 @@ class NodeSettings extends React.PureComponent { */} {node.type !== 'robot' && ( - + { )} {node.type === 'robot' && ( - + { )} {node.type === 'object' && ( - + { )} {node.type === 'from-template' && ( - + {
{(node.type === 'object' && geometry && geometry.type === 'box') ? (
{ ) : undefined} {(node.type === 'object' && geometry.type === 'sphere') ? (
{ ) : undefined} {(node.type === 'object' && geometry.type === 'cylinder') ? (
{
) : undefined} {(node.type === 'object' && geometry.type === 'plane') ? ( -
+
{ ) : undefined} {(node.type === 'object' && geometry.type === 'file') ? ( -
- +
+
) : undefined} {node.type === 'object' ? ( -
- +
+ {/* Basic Color */} {node.material && node.material.type === 'basic' && ( - + { {node.material && node.material.type === 'basic' && node.material.color && node.material.color.type === 'color3' && ( <> { )} {node.material && node.material.type === 'basic' && node.material.color && node.material.color.type === 'texture' && ( - + )} {/* Albedo */} {node.material && node.material.type === 'pbr' && ( - + { {node.material && node.material.type === 'pbr' && node.material.albedo && node.material.albedo.type === 'color3' && ( <> { )} {node.material && node.material.type === 'pbr' && node.material.albedo && node.material.albedo.type === 'texture' && ( - + )} {/* Reflection */} {node.material && node.material.type === 'pbr' && ( - + { {node.material && node.material.type === 'pbr' && node.material.reflection && node.material.reflection.type === 'color3' && ( <> { )} {node.material && node.material.type === 'pbr' && node.material.reflection && node.material.reflection.type === 'texture' && ( - + )} {/* Emissive */} {node.material && node.material.type === 'pbr' && ( - + { {node.material && node.material.type === 'pbr' && node.material.emissive && node.material.emissive.type === 'color3' && ( <> { )} {node.material && node.material.type === 'pbr' && node.material.emissive && node.material.emissive.type === 'texture' && ( - + )} {/* Ambient */} {node.material && node.material.type === 'pbr' && ( - + { {node.material && node.material.type === 'pbr' && node.material.ambient && node.material.ambient.type === 'color3' && ( <> { )} {node.material && node.material.type === 'pbr' && node.material.ambient && node.material.ambient.type === 'texture' && ( - + )} @@ -1342,7 +1353,7 @@ class NodeSettings extends React.PureComponent { {/* Metalness */} {node.material && node.material.type === 'pbr' && ( - + { {node.material && node.material.type === 'pbr' && node.material.metalness && node.material.metalness.type === 'color1' && ( <> { )} {node.material && node.material.type === 'pbr' && node.material.metalness && node.material.metalness.type === 'texture' && ( - + )}
) : undefined}
{ />
- + r.data === orientation.type)} onSelect={this.onRotationTypeChange_} /> {orientation.type === 'euler' ? ( <> - + { ) : ( <> { )}
{
{node.type === 'object' && (
- - + +
)} @@ -1529,5 +1540,6 @@ const PHSYICS_TYPE_MAPPINGS: { [key in Geometry.Type]: Node.Physics.Type } = { export default connect((state: ReduxState, ownProps: NodeSettingsPublicProps) => { return { robots: state.robots.robots, + locale: state.i18n.locale, }; })(NodeSettings) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/NodeSettingsDialog.tsx b/src/components/World/NodeSettingsDialog.tsx index d0c54c25..6c00d5e9 100644 --- a/src/components/World/NodeSettingsDialog.tsx +++ b/src/components/World/NodeSettingsDialog.tsx @@ -9,10 +9,13 @@ import Node from '../../state/State/Scene/Node'; import Scene from "../../state/State/Scene"; import Geometry from "../../state/State/Scene/Geometry"; import LocalizedString from '../../util/LocalizedString'; +import tr from '@i18n'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; export type NodeSettingsAcceptance = Node; -export interface NodeSettingsDialogProps extends ThemeProps { +export interface NodeSettingsDialogPublicProps extends ThemeProps { node: Node; id: string; scene: Scene; @@ -27,10 +30,14 @@ export interface NodeSettingsDialogProps extends ThemeProps { onClose: () => void; } +interface NodeSettingsDialogPrivateProps { + locale: LocalizedString.Language; +} + interface NodeSettingsDialogState { } -type Props = NodeSettingsDialogProps; +type Props = NodeSettingsDialogPublicProps & NodeSettingsDialogPrivateProps; type State = NodeSettingsDialogState; const StyledScrollArea = styled(ScrollArea, (props: ThemeProps) => ({ @@ -47,10 +54,10 @@ class NodeSettingsDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose, onChange, onOriginChange, node, id, scene, onGeometryAdd, onGeometryChange, onGeometryRemove } = props; + const { theme, onClose, onChange, onOriginChange, node, id, scene, onGeometryAdd, onGeometryChange, onGeometryRemove, locale } = props; return ( - + { } } -export default NodeSettingsDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(NodeSettingsDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/SceneMenu.tsx b/src/components/World/SceneMenu.tsx index cefc219a..fcd87d6b 100644 --- a/src/components/World/SceneMenu.tsx +++ b/src/components/World/SceneMenu.tsx @@ -6,7 +6,12 @@ import { Fa } from '../Fa'; import { ThemeProps } from '../theme'; import { faCaretSquareLeft, faClone, faCogs, faCopy, faEye, faEyeSlash, faFolderOpen, faPlus, faSave, faTrash } from '@fortawesome/free-solid-svg-icons'; -export interface SceneMenuProps extends StyleProps, ThemeProps { +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; + +export interface SceneMenuPublicProps extends StyleProps, ThemeProps { onSaveScene?: (event: React.MouseEvent) => void; onNewScene?: (event: React.MouseEvent) => void; onSaveAsScene?: (event: React.MouseEvent) => void; @@ -15,11 +20,15 @@ export interface SceneMenuProps extends StyleProps, ThemeProps { onDeleteScene?: (event: React.MouseEvent) => void; } +interface SceneMenuPrivateProps { + locale: LocalizedString.Language; +} + interface SceneMenuState { } -type Props = SceneMenuProps; +type Props = SceneMenuPublicProps & SceneMenuPrivateProps; type State = SceneMenuState; const Container = styled('div', (props: ThemeProps) => ({ @@ -82,17 +91,19 @@ class SceneMenu extends React.PureComponent { render() { const { props } = this; - const { theme, onSaveAsScene, onNewScene, onSaveScene, onOpenScene, onSettingsScene, onDeleteScene } = props; + const { theme, onSaveAsScene, onNewScene, onSaveScene, onOpenScene, onSettingsScene, onDeleteScene, locale } = props; return ( - Settings - Open - Save - Save As - Delete + {LocalizedString.lookup(tr('Settings'), locale)} + {LocalizedString.lookup(tr('Open'), locale)} + {LocalizedString.lookup(tr('Save'), locale)} + {LocalizedString.lookup(tr('Save As'), locale)} + {LocalizedString.lookup(tr('Delete'), locale)} ); } } -export default SceneMenu; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale +}))(SceneMenu) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/ScriptSettings.tsx b/src/components/World/ScriptSettings.tsx index bd9c64fd..c752c819 100644 --- a/src/components/World/ScriptSettings.tsx +++ b/src/components/World/ScriptSettings.tsx @@ -11,17 +11,26 @@ import { Ivygate } from 'ivygate'; import { Editor } from '../Editor'; import * as monaco from 'monaco-editor'; +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; -export interface ScriptSettingsProps extends ThemeProps { + +export interface ScriptSettingsPublicProps extends ThemeProps { onScriptChange: (script: Script) => void; script: Script; id: string; } +interface ScriptSettingsPrivateProps { + locale: LocalizedString.Language; +} + interface ScriptSettingsState { } -type Props = ScriptSettingsProps; +type Props = ScriptSettingsPublicProps & ScriptSettingsPrivateProps; type State = ScriptSettingsState; const StyledField = styled(Field, (props: ThemeProps) => ({ @@ -73,11 +82,11 @@ class ScriptSettings extends React.PureComponent { render() { const { props, state } = this; - const { theme, script, id } = props; + const { theme, script, id, locale } = props; return ( - + { } } -export default ScriptSettings; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(ScriptSettings) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/ScriptSettingsDialog.tsx b/src/components/World/ScriptSettingsDialog.tsx index 745749bf..4ba2df10 100644 --- a/src/components/World/ScriptSettingsDialog.tsx +++ b/src/components/World/ScriptSettingsDialog.tsx @@ -10,9 +10,14 @@ import DialogBar from '../DialogBar'; import { Fa } from '../Fa'; import { faCheck } from '@fortawesome/free-solid-svg-icons'; +import LocalizedString from '../../util/LocalizedString'; +import { connect } from 'react-redux'; +import { State as ReduxState } from '../../state'; +import tr from '@i18n'; + export type ScriptSettingsAcceptance = Script; -export interface ScriptSettingsDialogProps extends ThemeProps { +export interface ScriptSettingsDialogPublicProps extends ThemeProps { script: Script; id: string; @@ -20,11 +25,15 @@ export interface ScriptSettingsDialogProps extends ThemeProps { onAccept: (acceptance: ScriptSettingsAcceptance) => void; } +interface ScriptSettingsDialogPrivateProps { + locale: LocalizedString.Language; +} + interface ScriptSettingsDialogState { workingScript: Script; } -type Props = ScriptSettingsDialogProps; +type Props = ScriptSettingsDialogPublicProps & ScriptSettingsDialogPrivateProps; type State = ScriptSettingsDialogState; const InnerContainer = styled('div', () => ({ @@ -53,10 +62,10 @@ class ScriptSettingsDialog extends React.PureComponent { render() { const { props, state } = this; - const { theme, onClose, script, id } = props; + const { theme, onClose, script, id, locale } = props; return ( - + { /> - Accept + {LocalizedString.lookup(tr('Accept'), locale)} ); } } -export default ScriptSettingsDialog; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(ScriptSettingsDialog) as React.ComponentType; \ No newline at end of file diff --git a/src/components/World/index.tsx b/src/components/World/index.tsx index b8154278..d322bcf8 100644 --- a/src/components/World/index.tsx +++ b/src/components/World/index.tsx @@ -42,6 +42,9 @@ import ScriptSettingsDialog, { ScriptSettingsAcceptance } from './ScriptSettings import { AsyncChallenge } from '../../state/State/Challenge'; import Builder from '../../db/Builder'; +import tr from '@i18n'; +import { sprintf } from 'sprintf-js'; + namespace SceneState { export enum Type { Clean, @@ -70,12 +73,13 @@ namespace SceneState { export type SceneState = SceneState.Clean | SceneState.Saveable | SceneState.Copyable; -export const createWorldBarComponents = ({ theme, saveable, onSelectScene, onSaveScene, onCopyScene }: { +export const createWorldBarComponents = ({ theme, saveable, onSelectScene, onSaveScene, onCopyScene, locale }: { theme: Theme, saveable: boolean, onSelectScene: () => void, onSaveScene: () => void, - onCopyScene: () => void + onCopyScene: () => void, + locale: LocalizedString.Language, }) => { // eslint-disable-next-line @typescript-eslint/ban-types const worldBar: BarComponent[] = []; @@ -86,7 +90,7 @@ export const createWorldBarComponents = ({ theme, saveable, onSelectScene, onSav children: <> - {' Select Scene'} + {' '} {LocalizedString.lookup(tr('Select Scene'), locale)} , })); @@ -97,7 +101,7 @@ export const createWorldBarComponents = ({ theme, saveable, onSelectScene, onSav children: <> - {' Save Scene'} + {' '} {LocalizedString.lookup(tr('Save Scene'), locale)} , })); @@ -107,7 +111,7 @@ export const createWorldBarComponents = ({ theme, saveable, onSelectScene, onSav children: <> - {' Copy Scene'} + {' '} {LocalizedString.lookup(tr('Copy Scene'), locale)} , })); @@ -136,7 +140,7 @@ export const DEFAULT_CAPABILITIES: Capabilities = { nodeReset: true, }; -export interface WorldProps extends StyleProps, ThemeProps { +export interface WorldPublicProps extends StyleProps, ThemeProps { scene: AsyncScene; onNodeAdd: (nodeId: string, node: Node) => void; @@ -156,8 +160,9 @@ export interface WorldProps extends StyleProps, ThemeProps { capabilities?: Capabilities; } -interface ReduxWorldProps { - + +interface WorldPrivateProps { + locale: LocalizedString.Language; } namespace UiState { @@ -215,7 +220,7 @@ interface WorldState { modal: UiState; } -type Props = WorldProps; +type Props = WorldPublicProps & WorldPrivateProps; type State = WorldState; const Container = styled('div', (props: ThemeProps) => ({ @@ -248,8 +253,8 @@ const SectionIcon = styled(Fa, (props: ThemeProps) => ({ transition: 'opacity 0.2s' })); -class World extends React.PureComponent { - constructor(props: Props & ReduxWorldProps) { +class World extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { @@ -387,7 +392,8 @@ class World extends React.PureComponent { scene, onGeometryAdd, onGeometryRemove, - onGeometryChange + onGeometryChange, + locale } = props; const { collapsed, modal } = state; @@ -410,7 +416,7 @@ class World extends React.PureComponent { const hasReset = workingScene.nodes[nodeId].startingOrigin !== undefined; itemList.push(EditableList.Item.standard({ component: Item, - props: { name: node.name[LocalizedString.EN_US], theme }, + props: { name: LocalizedString.lookup(node.name, locale), theme }, onReset: hasReset && nodeReset ? this.onNodeResetClick_(nodeId) : undefined, onSettings: node.editable && nodeSettings ? this.onItemSettingsClick_(nodeId) : undefined, onVisibilityChange: nodeVisiblity ? this.onItemVisibilityChange_(nodeId) : undefined, @@ -441,7 +447,7 @@ class World extends React.PureComponent { const itemsName = StyledText.compose({ items: [ StyledText.text({ - text: `Item${itemList.length === 1 ? '' : 's'} (${itemList.length})`, + text: LocalizedString.lookup(Dict.map(tr('Item(s) (%d)'), (str: string) => sprintf(str, itemList.length)), locale) }) ] }); @@ -460,7 +466,7 @@ class World extends React.PureComponent { const scriptsName = StyledText.compose({ items: [ StyledText.text({ - text: `Script${itemList.length === 1 ? '' : 's'} (${scriptList.length})`, + text: LocalizedString.lookup(Dict.map(tr('Script(s) (%d)'), (str: string) => sprintf(str, scriptList.length)), locale) }) ] }); @@ -547,4 +553,6 @@ class World extends React.PureComponent { } } -export default World; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(World) as React.ComponentType; \ No newline at end of file diff --git a/src/components/documentation/DocumentationWindow.tsx b/src/components/documentation/DocumentationWindow.tsx index 44182b22..c6174da6 100644 --- a/src/components/documentation/DocumentationWindow.tsx +++ b/src/components/documentation/DocumentationWindow.tsx @@ -24,6 +24,9 @@ import { FunctionName } from './common'; import ModuleDocumentation from './ModuleDocumentation'; import StructureDocumentation from './StructureDocumentation'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; + namespace DragState { export interface None { type: 'none'; @@ -49,6 +52,7 @@ export interface DocumentationWindowPublicProps extends ThemeProps { interface DocumentationWindowPrivateProps { documentationState: DocumentationState; + locale: LocalizedString.Language; onDocumentationSizeChange: (size: Size) => void; onDocumentationPop: () => void; @@ -172,6 +176,7 @@ class DocumentationWindow extends React.PureComponent { render() { const { props, state } = this; const { + locale, theme, documentationState, onDocumentationPop, @@ -217,7 +222,7 @@ class DocumentationWindow extends React.PureComponent { return ( { theme={theme} onDocumentationPush={onDocumentationPush} documentation={documentation} + locale={locale} /> )} {locationStackTop && locationStackTop.type === DocumentationLocation.Type.Function && ( @@ -242,6 +248,7 @@ class DocumentationWindow extends React.PureComponent { func={documentation.functions[locationStackTop.id]} onDocumentationPush={onDocumentationPush} theme={theme} + locale={locale} /> )} {locationStackTop && locationStackTop.type === DocumentationLocation.Type.File && ( @@ -251,6 +258,7 @@ class DocumentationWindow extends React.PureComponent { documentation={Documentation.subset(documentation, documentation.files[locationStackTop.id])} onDocumentationPush={onDocumentationPush} theme={theme} + locale={locale} /> )} {locationStackTop && locationStackTop.type === DocumentationLocation.Type.Module && ( @@ -260,6 +268,7 @@ class DocumentationWindow extends React.PureComponent { documentation={Documentation.subset(documentation, documentation.modules[locationStackTop.id])} onDocumentationPush={onDocumentationPush} theme={theme} + locale={locale} /> )} {locationStackTop && locationStackTop.type === DocumentationLocation.Type.Structure && ( @@ -268,6 +277,7 @@ class DocumentationWindow extends React.PureComponent { structure={documentation.structures[locationStackTop.id]} onDocumentationPush={onDocumentationPush} theme={theme} + locale={locale} /> )} @@ -318,7 +328,8 @@ class DocumentationWindow extends React.PureComponent { } export default connect((state: ReduxState) => ({ - documentationState: state.documentation + documentationState: state.documentation, + locale: state.i18n.locale, }), dispatch => ({ onDocumentationSizeChange: (size: Size) => dispatch(DocumentationAction.setSize({ size })), onDocumentationPop: () => dispatch(DocumentationAction.POP), diff --git a/src/components/documentation/FileDocumentation.tsx b/src/components/documentation/FileDocumentation.tsx index 2cca57f2..31ee00da 100644 --- a/src/components/documentation/FileDocumentation.tsx +++ b/src/components/documentation/FileDocumentation.tsx @@ -9,10 +9,14 @@ import Section from '../Section'; import { ThemeProps } from '../theme'; import FunctionBrief from './FunctionBrief'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; + export interface FileDocumentationProps extends StyleProps, ThemeProps { language: 'c' | 'python'; file: FileDocumentationModel; documentation: Documentation; + locale: LocalizedString.Language; onDocumentationPush: (location: DocumentationLocation) => void; } @@ -30,11 +34,12 @@ const FileDocumentation = ({ onDocumentationPush, style, className, - theme + theme, + locale }: Props) => { return ( -
+
{file.functions.map(id => ( void; } @@ -42,7 +46,7 @@ const ParameterPrototype = styled('span', { fontSize: '1.2em', }); -const FunctionDocumentation = ({ language, func, style, className, theme }: Props) => { +const FunctionDocumentation = ({ language, func, style, className, theme, locale }: Props) => { return ( @@ -52,12 +56,12 @@ const FunctionDocumentation = ({ language, func, style, className, theme }: Prop )} {func.detailed_description && func.detailed_description.length > 0 && ( -
+
{func.detailed_description}
)} {func.parameters.length > 0 && ( -
+
{language === 'c' ? ( func.parameters.map((parameter, index) => ( @@ -90,7 +94,7 @@ const FunctionDocumentation = ({ language, func, style, className, theme }: Prop
)} {func.return_type !== 'void' && ( -
+
{language === 'c' ? func.return_type : toPythonType(func.return_type)} diff --git a/src/components/documentation/ModuleDocumentation.tsx b/src/components/documentation/ModuleDocumentation.tsx index d9048e62..62781fe4 100644 --- a/src/components/documentation/ModuleDocumentation.tsx +++ b/src/components/documentation/ModuleDocumentation.tsx @@ -10,10 +10,14 @@ import Section from '../Section'; import { ThemeProps } from '../theme'; import FunctionBrief from './FunctionBrief'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; + export interface ModuleDocumentationProps extends StyleProps, ThemeProps { language: 'c' | 'python'; module: ModuleDocumentationModel; documentation: Documentation; + locale: LocalizedString.Language; onDocumentationPush: (location: DocumentationLocation) => void; } @@ -31,7 +35,8 @@ const ModuleDocumentation = ({ onDocumentationPush, style, className, - theme + theme, + locale }: Props) => { const functions: [string, FunctionDocumentation][] = module.functions.map(f => [f, documentation.functions[f]]); @@ -40,7 +45,7 @@ const ModuleDocumentation = ({ return ( -
+
{functions.map(([id, f]) => ( void; } @@ -88,7 +92,7 @@ class RootDocumentation extends React.PureComponent { render() { const { props, state } = this; - const { theme, documentation, language } = props; + const { theme, documentation, language, locale } = props; const { query } = state; const sections: JSX.Element[] = []; @@ -101,7 +105,7 @@ class RootDocumentation extends React.PureComponent { if (modules.length > 0) { sections.push(( -
+
{modules.map(([id, module]) => ( { if (functions.length > 0) { sections.push(( -
+
{functions.map(([id, func]) => ( { if (structures.length > 0) { sections.push(( -
+
{structures.map(([id, structure]) => ( { if (enumerations.length > 0) { sections.push(( -
+
{enumerations.map(([id, enumeration]) => ( { if (files.length > 0) { sections.push(( -
+
{files.map(([id, file]) => ( { type='text' onChange={this.onQueryChange_} value={query} - placeholder='Search...' + placeholder={LocalizedString.lookup(tr('Search...'), locale)} /> {sections} diff --git a/src/components/documentation/StructureDocumentation.tsx b/src/components/documentation/StructureDocumentation.tsx index 14df697a..bf40a3d0 100644 --- a/src/components/documentation/StructureDocumentation.tsx +++ b/src/components/documentation/StructureDocumentation.tsx @@ -12,9 +12,13 @@ import FunctionBrief from './FunctionBrief'; import StructureBrief from './StructureBrief'; import { toPythonType } from './util'; +import tr from '@i18n'; +import LocalizedString from '../../util/LocalizedString'; + export interface StructureDocumentationProps extends StyleProps, ThemeProps { language: 'c' | 'python'; structure: StructureDocumentationModel; + locale: LocalizedString.Language; onDocumentationPush: (location: DocumentationLocation) => void; } @@ -50,7 +54,8 @@ const StructureDocumentation = ({ onDocumentationPush, style, className, - theme + theme, + locale }: Props) => { return ( @@ -61,12 +66,12 @@ const StructureDocumentation = ({ )} {structure.detailed_description && structure.detailed_description.length > 0 && ( -
+
{structure.detailed_description}
)} {structure.members.length > 0 && ( -
+
{language === 'c' ? ( structure.members.map((member, index) => ( diff --git a/src/i18n.ts b/src/i18n.ts new file mode 100644 index 00000000..6d70222e --- /dev/null +++ b/src/i18n.ts @@ -0,0 +1,10 @@ +import Dict from './Dict'; +import LocalizedString from './util/LocalizedString'; + +export type I18n = Dict>; + +const I18N = SIMULATOR_I18N as I18n; + +export default (enUs: string, description?: string) => (I18N[description || ''] || {})[enUs] || { + [LocalizedString.EN_US]: enUs, +}; \ No newline at end of file diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 3bce9436..c70c4bd6 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -8,6 +8,10 @@ import { RouteComponentProps } from 'react-router'; import { connect } from 'react-redux'; import { push } from 'connected-react-router'; +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import { State } from '../state'; + export interface DashboardPublicProps extends RouteComponentProps, ThemeProps, StyleProps { @@ -16,6 +20,7 @@ export interface DashboardPublicProps extends RouteComponentProps, ThemeProps, S interface DashboardPrivateProps { onTutorialsClick: () => void; onSimulatorClick: () => void; + locale: LocalizedString.Language; } type Props = DashboardPublicProps & DashboardPrivateProps; @@ -61,7 +66,7 @@ class Dashboard extends React.PureComponent { render() { const { props } = this; - const { className, style, onTutorialsClick, onSimulatorClick } = props; + const { className, style, onTutorialsClick, onSimulatorClick, locale } = props; const theme = DARK; return ( @@ -70,24 +75,24 @@ class Dashboard extends React.PureComponent { { } } -export default connect(undefined, dispatch => ({ +export default connect((state: State) => ({ + locale: state.i18n.locale, +}), dispatch => ({ onTutorialsClick: () => dispatch(push('/tutorials')), onSimulatorClick: () => dispatch(push('/scene/jbcSandboxA')), }))(Dashboard) as React.ComponentType; \ No newline at end of file diff --git a/src/pages/Tutorials.tsx b/src/pages/Tutorials.tsx index fd9379cf..504b4161 100644 --- a/src/pages/Tutorials.tsx +++ b/src/pages/Tutorials.tsx @@ -8,14 +8,25 @@ import IFrame from '../components/IFrame'; import { tutorialList } from './tutorialList'; import { Vector2 } from '../math'; +import tr from '@i18n'; +import LocalizedString from '../util/LocalizedString'; +import { connect } from 'react-redux'; -export interface TutorialsProps extends StyleProps, ThemeProps {} +import { State as ReduxState } from '../state'; + + +export interface TutorialsPublicProps extends StyleProps, ThemeProps { +} + +interface TutorialsPrivateProps { + locale: LocalizedString.Language; +} interface TutorialsState { selected: string; } -type Props = TutorialsProps; +type Props = TutorialsPublicProps & TutorialsPrivateProps; type State = TutorialsState; const Container = styled('div', (props: ThemeProps) => ({ @@ -97,7 +108,7 @@ class Tutorials extends React.Component { render() { const { props, state } = this; - const { style } = props; + const { style, locale } = props; const { selected } = state; const theme = DARK; @@ -114,8 +125,8 @@ class Tutorials extends React.Component { {tutorialList.map((tutorial, index) => ( { } } -export default Tutorials; \ No newline at end of file +export default connect((state: ReduxState) => ({ + locale: state.i18n.locale, +}))(Tutorials) as React.ComponentType; \ No newline at end of file diff --git a/src/pages/WidgetTest.tsx b/src/pages/WidgetTest.tsx deleted file mode 100644 index f645abab..00000000 --- a/src/pages/WidgetTest.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as React from 'react'; -import PredicateEditor from '../components/Challenge/PredicateEditor'; -import HTree, { HTreeNode } from '../components/HTree'; -import Dict from '../Dict'; -import Event from '../state/State/Challenge/Event'; -import Expr from '../state/State/Challenge/Expr'; -import Predicate from '../state/State/Challenge/Predicate'; -import PredicateCompletion from '../state/State/ChallengeCompletion/PredicateCompletion'; -import LocalizedString from '../util/LocalizedString'; - -export interface WidgetTestProps { - -} - -const WidgetTest: React.FC = props => { - - const parent: HTreeNode = { - component: () =>
Parent
, - props: {}, - }; - - const predicate: Predicate = { - exprs: { - '1': { - type: Expr.Type.And, - argIds: ['2', '3'], - }, - '2': { - type: Expr.Type.Or, - argIds: ['4', '5'], - }, - '3': { - type: Expr.Type.Xor, - argIds: ['6', '7'], - }, - '4': { - type: Expr.Type.Event, - eventId: '8', - }, - '5': { - type: Expr.Type.Event, - eventId: '9', - }, - '6': { - type: Expr.Type.Event, - eventId: '10', - }, - '7': { - type: Expr.Type.Event, - eventId: '11', - }, - }, - rootId: '1', - }; - - const events: Dict = { - '8': { - name: { [LocalizedString.EN_US]: 'Event 8' }, - description: { [LocalizedString.EN_US]: 'Event 8 description' }, - }, - '9': { - name: { [LocalizedString.EN_US]: 'Event 9' }, - description: { [LocalizedString.EN_US]: 'Event 9 description' }, - }, - '10': { - name: { [LocalizedString.EN_US]: 'Event 10' }, - description: { [LocalizedString.EN_US]: 'Event 10 description' }, - }, - '11': { - name: { [LocalizedString.EN_US]: 'Event 11' }, - description: { [LocalizedString.EN_US]: 'Event 11 description' }, - }, - }; - - const predicateCompletion: PredicateCompletion = { - exprStates: { - '6': true, - '7': false, - }, - }; - - return ( - - ); -}; - -export default WidgetTest; - diff --git a/src/pages/interfaces/tutorial.interface.ts b/src/pages/interfaces/tutorial.interface.ts index 695b0ca5..81370336 100644 --- a/src/pages/interfaces/tutorial.interface.ts +++ b/src/pages/interfaces/tutorial.interface.ts @@ -1,6 +1,8 @@ +import LocalizedString from 'util/LocalizedString'; + export default interface Tutorial { - title?: string; - description?: string; + title?: LocalizedString; + description?: LocalizedString; src?: string; backgroundImage?: string; backgroundColor?: string; diff --git a/src/pages/tutorialList.ts b/src/pages/tutorialList.ts index a569eca6..6218ee50 100644 --- a/src/pages/tutorialList.ts +++ b/src/pages/tutorialList.ts @@ -1,29 +1,31 @@ import * as React from 'react'; import Tutorial from './interfaces/tutorial.interface'; +import tr from '@i18n'; + export const tutorialList: Tutorial [] = [ { - title: 'Quick Start', - description: 'Learn how to get started with the simulator', + title: tr('Quick Start'), + description: tr('Learn how to get started with the simulator'), backgroundColor: '#6c6ca1', backgroundImage: 'url(../../static/Laptop_Icon_Sunscreen.png)', src: 'https://www.youtube.com/embed/7Szf-iQjNCw', }, { - title: 'Navigating in 3D', - description: 'Learn the controls for navigating in 3D in the simulator', + title: tr('Navigating in 3D'), + description: tr('Learn the controls for navigating in 3D in the simulator'), backgroundImage: 'linear-gradient(#3b3c3c, transparent), url(../../static/Simulator_Full_View.png)', src: 'https://www.youtube.com/embed/RBpWIpBlYK8', }, { - title: 'Robot Section', - description: 'How to use the robot section', + title: tr('Robot Section'), + description: tr('How to use the robot section'), backgroundImage: 'url(../../static/Simulator-Robot-Closeup.png)', src: 'https://www.youtube.com/embed/SmYR1esidcc', }, { - title: 'World Section', - description: 'Learn how to create and manipulate items and scene in the simulator', + title: tr('World Section'), + description: tr('Learn how to create and manipulate items and scene in the simulator'), backgroundImage: 'linear-gradient(#3b3c3c, transparent), url(../../static/Can_Ream.png)', src: 'https://www.youtube.com/embed/K7GsS8s3Rfg', }, diff --git a/src/robots/demobot.ts b/src/robots/demobot.ts index 8982c826..9a91f053 100644 --- a/src/robots/demobot.ts +++ b/src/robots/demobot.ts @@ -6,14 +6,14 @@ import { Vector3 as RawVector3 } from '../math'; import { Rotation, Vector3 } from '../unit-math'; import LocalizedString from '../util/LocalizedString'; +import tr from '@i18n'; + const { meters } = Distance; const { degrees } = Angle; const { grams } = Mass; export const DEMOBOT: Robot = { - name: { - [LocalizedString.EN_US]: 'Demobot', - }, + name: tr('Demobot'), authorId: 'kipr', nodes: { chassis: Node.link({ diff --git a/src/scenes/jbc1.ts b/src/scenes/jbc1.ts index a65ee3cb..fbcdb538 100644 --- a/src/scenes/jbc1.ts +++ b/src/scenes/jbc1.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_1: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 1' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 1: Tag, You're It!` }, + name: tr('JBC 1'), + description: tr('Junior Botball Challenge 1: Tag, You\'re It!'), nodes: { ...baseScene.nodes, 'can9': createCanNode(9), diff --git a/src/scenes/jbc10.ts b/src/scenes/jbc10.ts index 7cfc3a8a..ce7e4d9c 100644 --- a/src/scenes/jbc10.ts +++ b/src/scenes/jbc10.ts @@ -4,12 +4,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); export const JBC_10: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 10' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 10: Solo Joust' }, + name: tr('JBC 10'), + description: tr('Junior Botball Challenge 10: Solo Joust'), nodes: { ...baseScene.nodes, 'can1': createCanNode(1, { x: Distance.centimeters(11), y: Distance.centimeters(0), z: Distance.centimeters(91) }), diff --git a/src/scenes/jbc10b.ts b/src/scenes/jbc10b.ts index 9d9e19a4..78ca34b9 100644 --- a/src/scenes/jbc10b.ts +++ b/src/scenes/jbc10b.ts @@ -4,12 +4,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); export const JBC_10B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 10B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 10: Solo Joust Jr.' }, + name: tr('JBC 10B'), + description: tr('Junior Botball Challenge 10: Solo Joust Jr.'), nodes: { ...baseScene.nodes, 'can1': createCanNode(1, { x: Distance.centimeters(-13), y: Distance.centimeters(0), z: Distance.centimeters(17) }), // green line diff --git a/src/scenes/jbc12.ts b/src/scenes/jbc12.ts index 3b95c267..564184b1 100644 --- a/src/scenes/jbc12.ts +++ b/src/scenes/jbc12.ts @@ -4,12 +4,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_12: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 12' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 12: Unload 'Em` }, + name: tr('JBC 12'), + description: tr('Junior Botball Challenge 12: Unload \'Em'), nodes: { ...baseScene.nodes, 'can1': createCanNode(1, { x: Distance.centimeters(0), y: Distance.centimeters(0), z: Distance.centimeters(53.3) }), diff --git a/src/scenes/jbc13.ts b/src/scenes/jbc13.ts index ffa75f25..6db7e10f 100644 --- a/src/scenes/jbc13.ts +++ b/src/scenes/jbc13.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_13: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 13' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 13: Clean the Mat` }, + name: tr('JBC 13'), + description: tr('Junior Botball Challenge 13: Clean the Mat'), nodes: { ...baseScene.nodes, 'can2': createCanNode(2), diff --git a/src/scenes/jbc15b.ts b/src/scenes/jbc15b.ts index 86ad6d17..f73f5384 100644 --- a/src/scenes/jbc15b.ts +++ b/src/scenes/jbc15b.ts @@ -5,6 +5,8 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const ROBOT_ORIGIN: ReferenceFrame = { @@ -41,8 +43,8 @@ const REAM2_ORIGIN: ReferenceFrame = { export const JBC_15B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 15B' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 15B: Bump Bump` }, + name: tr('JBC 15B'), + description: tr('Junior Botball Challenge 15B: Bump Bump'), nodes: { ...baseScene.nodes, // The normal starting position of the robot doesn't leave room for the paper ream in the starting box @@ -55,7 +57,7 @@ export const JBC_15B: Scene = { 'ream1': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 1' }, + name: tr('Paper Ream 1'), startingOrigin: REAM1_ORIGIN, origin: REAM1_ORIGIN, visible: true, @@ -63,7 +65,7 @@ export const JBC_15B: Scene = { 'ream2': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 2' }, + name: tr('Paper Ream 2'), startingOrigin: REAM2_ORIGIN, origin: REAM2_ORIGIN, visible: true, diff --git a/src/scenes/jbc17.ts b/src/scenes/jbc17.ts index 429c540c..f45f5342 100644 --- a/src/scenes/jbc17.ts +++ b/src/scenes/jbc17.ts @@ -4,10 +4,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); export const JBC_17: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 17' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 17: Walk the Line' }, + name: tr('JBC 17'), + description: tr('Junior Botball Challenge 17: Walk the Line'), }; \ No newline at end of file diff --git a/src/scenes/jbc17b.ts b/src/scenes/jbc17b.ts index 38d0874f..de433ae5 100644 --- a/src/scenes/jbc17b.ts +++ b/src/scenes/jbc17b.ts @@ -5,6 +5,8 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); const ROBOT_ORIGIN: ReferenceFrame = { @@ -17,8 +19,8 @@ const ROBOT_ORIGIN: ReferenceFrame = { export const JBC_17B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 17B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 17: Walk the Line II' }, + name: tr('JBC 17B'), + description: tr('Junior Botball Challenge 17: Walk the Line II'), // Start the robot on the black tape nodes: { ...baseScene.nodes, diff --git a/src/scenes/jbc19.ts b/src/scenes/jbc19.ts index b342c5f0..76c0e769 100644 --- a/src/scenes/jbc19.ts +++ b/src/scenes/jbc19.ts @@ -5,6 +5,8 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const REAM_ORIGIN: ReferenceFrame = { @@ -21,8 +23,8 @@ const REAM_ORIGIN: ReferenceFrame = { export const JBC_19: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 19' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 19: Mountain Rescue` }, + name: tr('JBC 19'), + description: tr('Junior Botball Challenge 19: Mountain Rescue'), nodes: { ...baseScene.nodes, 'can1': createCanNode(1, { x: Distance.centimeters(-3), y: Distance.centimeters(6), z: Distance.centimeters(98.6) }), @@ -31,7 +33,7 @@ export const JBC_19: Scene = { 'ream': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream' }, + name: tr('Paper Ream'), startingOrigin: REAM_ORIGIN, origin: REAM_ORIGIN, visible: true, diff --git a/src/scenes/jbc2.ts b/src/scenes/jbc2.ts index 97fa45d5..0f7f16ba 100644 --- a/src/scenes/jbc2.ts +++ b/src/scenes/jbc2.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_2: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 2' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 2: Ring Around the Can' }, + name: tr('JBC 2'), + description: tr('Junior Botball Challenge 2: Ring Around the Can'), nodes: { ...baseScene.nodes, 'can6': createCanNode(6), diff --git a/src/scenes/jbc20.ts b/src/scenes/jbc20.ts index 61e4e7c7..c07aa3e8 100644 --- a/src/scenes/jbc20.ts +++ b/src/scenes/jbc20.ts @@ -5,6 +5,8 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const ROBOT_ORIGIN: ReferenceFrame = { @@ -25,8 +27,8 @@ const REAM_ORIGIN: ReferenceFrame = { export const JBC_20: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 20' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 20: Rescue the Cans` }, + name: tr('JBC 20'), + description: tr('Junior Botball Challenge 20: Rescue the Cans'), nodes: { ...baseScene.nodes, // The normal starting position of the robot doesn't leave room for the paper ream in the starting box @@ -43,7 +45,7 @@ export const JBC_20: Scene = { 'ream': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream' }, + name: tr('Paper Ream'), startingOrigin: REAM_ORIGIN, origin: REAM_ORIGIN, visible: true, diff --git a/src/scenes/jbc21.ts b/src/scenes/jbc21.ts index f3e5291b..dda7f2c7 100644 --- a/src/scenes/jbc21.ts +++ b/src/scenes/jbc21.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_21: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 21' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 21: Foot Tall` }, + name: tr('JBC 21'), + description: tr('Junior Botball Challenge 21: Foot Tall'), nodes: { ...baseScene.nodes, 'can9': createCanNode(9), diff --git a/src/scenes/jbc22.ts b/src/scenes/jbc22.ts index 44f86f02..76c75b2d 100644 --- a/src/scenes/jbc22.ts +++ b/src/scenes/jbc22.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_22: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 22' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 22: Stackerz` }, + name: tr('JBC 22'), + description: tr('Junior Botball Challenge 22: Stackerz'), nodes: { ...baseScene.nodes, 'can5': createCanNode(5), diff --git a/src/scenes/jbc2b.ts b/src/scenes/jbc2b.ts index accad53e..0d913553 100644 --- a/src/scenes/jbc2b.ts +++ b/src/scenes/jbc2b.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_2B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 2B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 2B: Ring Around the Can, Sr.' }, + name: tr('JBC 2B'), + description: tr('Junior Botball Challenge 2B: Ring Around the Can, Sr.'), nodes: { ...baseScene.nodes, 'can10': createCanNode(10), diff --git a/src/scenes/jbc2c.ts b/src/scenes/jbc2c.ts index 75cddead..1688e771 100644 --- a/src/scenes/jbc2c.ts +++ b/src/scenes/jbc2c.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_2C: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 2C' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 2C: Back It Up' }, + name: tr('JBC 2C'), + description: tr('Junior Botball Challenge 2C: Back It Up'), nodes: { ...baseScene.nodes, 'can6': createCanNode(6), diff --git a/src/scenes/jbc2d.ts b/src/scenes/jbc2d.ts index 1a31d9dc..f9248740 100644 --- a/src/scenes/jbc2d.ts +++ b/src/scenes/jbc2d.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_2D: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 2D' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 2D: Ring Around the Can and Back It Up' }, + name: tr('JBC 2D'), + description: tr('Junior Botball Challenge 2D: Ring Around the Can and Back It Up'), nodes: { ...baseScene.nodes, 'can6': createCanNode(6), diff --git a/src/scenes/jbc3.ts b/src/scenes/jbc3.ts index 17488818..9bee76ff 100644 --- a/src/scenes/jbc3.ts +++ b/src/scenes/jbc3.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_3: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 3' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 3: Precision Parking' }, + name: tr('JBC 3'), + description: tr('Junior Botball Challenge 3: Precision Parking'), }; \ No newline at end of file diff --git a/src/scenes/jbc3b.ts b/src/scenes/jbc3b.ts index 9bb5337b..56a90ea5 100644 --- a/src/scenes/jbc3b.ts +++ b/src/scenes/jbc3b.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_3B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 3B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 3B: Parallel Parking' }, + name: tr('JBC 3B'), + description: tr('Junior Botball Challenge 3B: Parallel Parking'), }; \ No newline at end of file diff --git a/src/scenes/jbc3c.ts b/src/scenes/jbc3c.ts index 0e753a21..1c517ca5 100644 --- a/src/scenes/jbc3c.ts +++ b/src/scenes/jbc3c.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_3C: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 3C' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 3C: Quick Get Away!' }, + name: tr('JBC 3C'), + description: tr('Junior Botball Challenge 3C: Quick Get Away!'), }; \ No newline at end of file diff --git a/src/scenes/jbc4.ts b/src/scenes/jbc4.ts index 8fb26b26..8e5f138e 100644 --- a/src/scenes/jbc4.ts +++ b/src/scenes/jbc4.ts @@ -5,10 +5,12 @@ import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; const baseScene = createBaseSceneSurfaceA(); +import tr from '@i18n'; + export const JBC_4: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 4' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 4: Figure Eight' }, + name: tr('JBC 4'), + description: tr('Junior Botball Challenge 4: Figure Eight'), nodes: { ...baseScene.nodes, 'can4': createCanNode(4), diff --git a/src/scenes/jbc4b.ts b/src/scenes/jbc4b.ts index 448e220e..27a9d799 100644 --- a/src/scenes/jbc4b.ts +++ b/src/scenes/jbc4b.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_4B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 4B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 4B: Barrel Racing' }, + name: tr('JBC 4B'), + description: tr('Junior Botball Challenge 4B: Barrel Racing'), nodes: { ...baseScene.nodes, 'can5': createCanNode(5), diff --git a/src/scenes/jbc5.ts b/src/scenes/jbc5.ts index ef37e846..86799e33 100644 --- a/src/scenes/jbc5.ts +++ b/src/scenes/jbc5.ts @@ -1,12 +1,13 @@ import Scene from "../state/State/Scene"; -import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_5: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 5' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 5: Dance Party' }, + name: tr('JBC 5'), + description: tr('Junior Botball Challenge 5: Dance Party') }; \ No newline at end of file diff --git a/src/scenes/jbc5b.ts b/src/scenes/jbc5b.ts index 798cbbbe..dd1ac2fb 100644 --- a/src/scenes/jbc5b.ts +++ b/src/scenes/jbc5b.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_5B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 5B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 5B: Line Dance' }, + name: tr('JBC 5B'), + description: tr('Junior Botball Challenge 5B: Line Dance') }; \ No newline at end of file diff --git a/src/scenes/jbc5c.ts b/src/scenes/jbc5c.ts index 805fa595..c0aed779 100644 --- a/src/scenes/jbc5c.ts +++ b/src/scenes/jbc5c.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); export const JBC_5C: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 5C' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 5C: Synchronized Dancing' }, + name: tr('JBC 5C'), + description: tr('Junior Botball Challenge 5C: Synchronized Dancing'), }; \ No newline at end of file diff --git a/src/scenes/jbc6.ts b/src/scenes/jbc6.ts index 1fd345bf..cb73b620 100644 --- a/src/scenes/jbc6.ts +++ b/src/scenes/jbc6.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_6: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 6' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 6: Load 'Em Up` }, + name: tr('JBC 6'), + description: tr('Junior Botball Challenge 6: Load \'Em Up'), nodes: { ...baseScene.nodes, 'can2': createCanNode(2), diff --git a/src/scenes/jbc6b.ts b/src/scenes/jbc6b.ts index 22ea7899..8d1a3492 100644 --- a/src/scenes/jbc6b.ts +++ b/src/scenes/jbc6b.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_6B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 6B' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 6B: Pick 'Em Up` }, + name: tr('JBC 6B'), + description: tr('Junior Botball Challenge 6B: Pick \'Em Up'), nodes: { ...baseScene.nodes, 'can2': createCanNode(2), diff --git a/src/scenes/jbc6c.ts b/src/scenes/jbc6c.ts index f4ba3eaf..9c698095 100644 --- a/src/scenes/jbc6c.ts +++ b/src/scenes/jbc6c.ts @@ -6,6 +6,8 @@ import Script from '../state/State/Scene/Script'; import { Distance } from "../util"; import LocalizedString from '../util/LocalizedString'; +import tr from '@i18n'; + import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; // import jbc6c from "../challenges/jbc6c"; @@ -99,8 +101,8 @@ scene.addOnRenderListener(() => { export const JBC_6C: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 6C' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 6C: Empty the Garage` }, + name: tr('JBC 6C'), + description: tr('Junior Botball Challenge 6C: Empty the Garage'), scripts: { 'circleIntersects': Script.ecmaScript('Circle Intersects', circleIntersects), 'surfaceIntersect': Script.ecmaScript('Surface Intersect', surfaceIntersect), @@ -137,7 +139,7 @@ export const JBC_6C: Scene = { 'circle2': { type: 'object', geometryId: 'circle2_geom', - name: { [LocalizedString.EN_US]: 'Circle 2' }, + name: tr('Circle 2'), visible: false, origin: { position: { @@ -157,7 +159,7 @@ export const JBC_6C: Scene = { 'circle9': { type: 'object', geometryId: 'circle9_geom', - name: { [LocalizedString.EN_US]: 'Circle 9' }, + name: tr('Circle 9'), visible: false, origin: { position: { @@ -177,7 +179,7 @@ export const JBC_6C: Scene = { 'circle10': { type: 'object', geometryId: 'circle10_geom', - name: { [LocalizedString.EN_US]: 'Circle 10' }, + name: tr('Circle 10'), visible: false, origin: { position: { @@ -197,7 +199,7 @@ export const JBC_6C: Scene = { 'mainSurface': { type: 'object', geometryId: 'mainSurface_geom', - name: { [LocalizedString.EN_US]: 'Mat Surface' }, + name: tr('Mat Surface'), visible: false, origin: { position: { diff --git a/src/scenes/jbc7.ts b/src/scenes/jbc7.ts index 2b64c814..7f886fde 100644 --- a/src/scenes/jbc7.ts +++ b/src/scenes/jbc7.ts @@ -1,14 +1,16 @@ import Scene from "../state/State/Scene"; import LocalizedString from '../util/LocalizedString'; +import tr from '@i18n'; + import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; const baseScene = createBaseSceneSurfaceA(); export const JBC_7: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 7' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 7: Bulldozer Mania` }, + name: tr('JBC 7'), + description: tr('Junior Botball Challenge 7: Bulldozer Mania'), nodes: { ...baseScene.nodes, 'can1': createCanNode(1), diff --git a/src/scenes/jbc7b.ts b/src/scenes/jbc7b.ts index 3b2c4947..1b35bdcc 100644 --- a/src/scenes/jbc7b.ts +++ b/src/scenes/jbc7b.ts @@ -5,6 +5,8 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA, createCanNode } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const ROBOT_ORIGIN: ReferenceFrame = { @@ -17,8 +19,8 @@ const ROBOT_ORIGIN: ReferenceFrame = { export const JBC_7B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 7B' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge 7B: Cover Your Bases` }, + name: tr('JBC 7B'), + description: tr('Junior Botball Challenge 7B: Cover Your Bases'), nodes: { ...baseScene.nodes, // The normal starting position of the robot covers the tape diff --git a/src/scenes/jbc8.ts b/src/scenes/jbc8.ts index a65722a3..f70c5185 100644 --- a/src/scenes/jbc8.ts +++ b/src/scenes/jbc8.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_8: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 8' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 8: Serpentine' }, + name: tr('JBC 8'), + description: tr('Junior Botball Challenge 8: Serpentine'), }; \ No newline at end of file diff --git a/src/scenes/jbc8b.ts b/src/scenes/jbc8b.ts index cc97789a..65522464 100644 --- a/src/scenes/jbc8b.ts +++ b/src/scenes/jbc8b.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_8B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 8B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 8B: Serpentine Jr.' }, + name: tr('JBC 8B'), + description: tr('Junior Botball Challenge 8B: Serpentine Jr.'), }; \ No newline at end of file diff --git a/src/scenes/jbc9.ts b/src/scenes/jbc9.ts index 5ea42182..31965172 100644 --- a/src/scenes/jbc9.ts +++ b/src/scenes/jbc9.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_9: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 9' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 9: Add It Up' }, + name: tr('JBC 9'), + description: tr('Junior Botball Challenge 9: Add It Up'), }; \ No newline at end of file diff --git a/src/scenes/jbc9b.ts b/src/scenes/jbc9b.ts index 446e2436..a87eca2b 100644 --- a/src/scenes/jbc9b.ts +++ b/src/scenes/jbc9b.ts @@ -3,10 +3,12 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); export const JBC_9B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC 9B' }, - description: { [LocalizedString.EN_US]: 'Junior Botball Challenge 9B: Balancing Act' }, + name: tr('JBC 9B'), + description: tr('Junior Botball Challenge 9B: Balancing Act'), }; \ No newline at end of file diff --git a/src/scenes/jbcBase.ts b/src/scenes/jbcBase.ts index a49b0502..af41c03c 100644 --- a/src/scenes/jbcBase.ts +++ b/src/scenes/jbcBase.ts @@ -7,6 +7,10 @@ import AbstractRobot from '../AbstractRobot'; import LocalizedString from '../util/LocalizedString'; import Author from '../db/Author'; +import tr from '@i18n'; +import { sprintf } from 'sprintf-js'; +import Dict from '../Dict'; + const ROBOT_ORIGIN: ReferenceFrame = { position: Vector3.centimeters(0, 5, 0), orientation: Rotation.eulerDegrees(0, 0, 0), @@ -14,7 +18,7 @@ const ROBOT_ORIGIN: ReferenceFrame = { const ROBOT: Node.Robot = { type: 'robot', - name: { [LocalizedString.EN_US]: 'Robot' }, + name: tr('Robot'), robotId: 'demobot', state: AbstractRobot.Stateless.NIL, visible: true, @@ -59,8 +63,8 @@ const LIGHT_ORIGIN: ReferenceFrame = { export function createBaseSceneSurfaceA(): Scene { return { - name: { [LocalizedString.EN_US]: 'Base Scene - Surface A' }, - description: { [LocalizedString.EN_US]: 'A base scene using Surface A. Intended to be augmented to create full JBC scenes' }, + name: tr('Base Scene - Surface A'), + description: tr('A base scene using Surface A. Intended to be augmented to create full JBC scenes'), author: Author.organization('kipr'), geometry: { 'ground': { @@ -76,7 +80,7 @@ export function createBaseSceneSurfaceA(): Scene { 'jbc_mat_a': { type: 'from-template', templateId: 'jbc_mat_a', - name: { [LocalizedString.EN_US]: 'JBC Surface A' }, + name: tr('JBC Surface A'), startingOrigin: JBC_MAT_ORIGIN, origin: JBC_MAT_ORIGIN, visible: true, @@ -84,7 +88,7 @@ export function createBaseSceneSurfaceA(): Scene { 'ground': { type: 'object', geometryId: 'ground', - name: { [LocalizedString.EN_US]: 'Ground' }, + name: tr('Ground'), startingOrigin: GROUND_ORIGIN, origin: GROUND_ORIGIN, visible: true, @@ -97,7 +101,7 @@ export function createBaseSceneSurfaceA(): Scene { 'light0': { type: 'point-light', intensity: 1, - name: { [LocalizedString.EN_US]: 'Light' }, + name: tr('Light'), startingOrigin: LIGHT_ORIGIN, origin: LIGHT_ORIGIN, visible: true @@ -128,8 +132,8 @@ export function createBaseSceneSurfaceB(): Scene { return { - name: { [LocalizedString.EN_US]: 'Base Scene - Surface B' }, - description: { [LocalizedString.EN_US]: 'A base scene using Surface B. Intended to be augmented to create full JBC scenes' }, + name: tr('Base Scene - Surface B'), + description: tr('A base scene using Surface B. Intended to be augmented to create full JBC scenes'), author: Author.organization('kipr'), geometry: { 'ground': { @@ -145,7 +149,7 @@ export function createBaseSceneSurfaceB(): Scene { 'jbc_mat_b': { type: 'from-template', templateId: 'jbc_mat_b', - name: { [LocalizedString.EN_US]: 'JBC Surface B' }, + name: tr('JBC Surface B'), startingOrigin: JBC_MAT_ORIGIN, origin: JBC_MAT_ORIGIN, visible: true, @@ -153,7 +157,7 @@ export function createBaseSceneSurfaceB(): Scene { 'ground': { type: 'object', geometryId: 'ground', - name: { [LocalizedString.EN_US]: 'Ground' }, + name: tr('Ground'), startingOrigin: GROUND_ORIGIN, origin: GROUND_ORIGIN, visible: true, @@ -166,7 +170,7 @@ export function createBaseSceneSurfaceB(): Scene { 'light0': { type: 'point-light', intensity: 10000, - name: { [LocalizedString.EN_US]: 'Light' }, + name: tr('Light'), startingOrigin: LIGHT_ORIGIN, origin: LIGHT_ORIGIN, visible: true @@ -209,7 +213,7 @@ export function createCanNode(canNumber: number, canPosition?: Vector3, editable return { type: 'from-template', templateId: 'can', - name: { [LocalizedString.EN_US]: `Can ${canNumber}` }, + name: Dict.map(tr('Can %s'), (str: string) => sprintf(str, canNumber)), startingOrigin: origin, origin, editable: editable ?? false, diff --git a/src/scenes/jbcSandboxA.ts b/src/scenes/jbcSandboxA.ts index 9d208926..fdfaf939 100644 --- a/src/scenes/jbcSandboxA.ts +++ b/src/scenes/jbcSandboxA.ts @@ -6,6 +6,8 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const REAM1_ORIGIN: ReferenceFrame = { @@ -34,12 +36,8 @@ const REAM2_ORIGIN: ReferenceFrame = { export const JBC_Sandbox_A: Scene = { ...baseScene, - name: { - [LocalizedString.EN_US]: 'JBC Sandbox A' - }, - description: { - [LocalizedString.EN_US]: `Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by default.` - }, + name: tr('JBC Sandbox A'), + description: tr('Junior Botball Challenge Sandbox on Mat A. All cans 1-12 are available by default.'), nodes: { ...baseScene.nodes, 'robot': { @@ -61,7 +59,7 @@ export const JBC_Sandbox_A: Scene = { 'ream1': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 1' }, + name: tr('Paper Ream 1'), startingOrigin: REAM1_ORIGIN, origin: REAM1_ORIGIN, editable: true, @@ -70,7 +68,7 @@ export const JBC_Sandbox_A: Scene = { 'ream2': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 2' }, + name: tr('Paper Ream 2'), startingOrigin: REAM2_ORIGIN, origin: REAM2_ORIGIN, editable: true, diff --git a/src/scenes/jbcSandboxB.ts b/src/scenes/jbcSandboxB.ts index 6e0f8a79..94b937d7 100644 --- a/src/scenes/jbcSandboxB.ts +++ b/src/scenes/jbcSandboxB.ts @@ -3,12 +3,14 @@ import LocalizedString from '../util/LocalizedString'; import { createBaseSceneSurfaceB } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceB(); export const JBC_Sandbox_B: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'JBC Sandbox B' }, - description: { [LocalizedString.EN_US]: `Junior Botball Challenge Sandbox on Mat B.` }, + name: tr('JBC Sandbox B'), + description: tr('Junior Botball Challenge Sandbox on Mat B.'), nodes: { ...baseScene.nodes, 'robot': { diff --git a/src/scenes/scriptPlayground.ts b/src/scenes/scriptPlayground.ts index 97db4904..63f9d7f0 100644 --- a/src/scenes/scriptPlayground.ts +++ b/src/scenes/scriptPlayground.ts @@ -7,6 +7,8 @@ import LocalizedString from '../util/LocalizedString'; import { createCanNode, createBaseSceneSurfaceA } from './jbcBase'; +import tr from '@i18n'; + const baseScene = createBaseSceneSurfaceA(); const intersection = ` @@ -43,8 +45,8 @@ scene.addOnCollisionListener('can6', (otherNodeId) => { export const scriptPlayground: Scene = { ...baseScene, - name: { [LocalizedString.EN_US]: 'Script Playground' }, - description: { [LocalizedString.EN_US]: `Script tests` }, + name: tr('Script Playground'), + description: tr('Script tests'), scripts: { 'intersection': Script.ecmaScript('Intersection', intersection), 'collision': Script.ecmaScript('Collision', collision), @@ -65,7 +67,7 @@ export const scriptPlayground: Scene = { 'volume': { type: 'object', geometryId: 'volume_geom', - name: { [LocalizedString.EN_US]: 'Volume' }, + name: tr('Volume', 'Volume (box) in the 3D scene'), visible: true, origin: { position: { @@ -97,7 +99,7 @@ export const scriptPlayground: Scene = { 'ream1': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 1' }, + name: tr('Paper Ream 1'), origin: { position: { x: Distance.centimeters(0), @@ -115,7 +117,7 @@ export const scriptPlayground: Scene = { 'ream2': { type: 'from-template', templateId: 'ream', - name: { [LocalizedString.EN_US]: 'Paper Ream 2' }, + name: tr('Paper Ream 2'), origin: { position: { x: Distance.centimeters(0), diff --git a/src/state/State/index.ts b/src/state/State/index.ts index 5bc95c36..88c7f397 100644 --- a/src/state/State/index.ts +++ b/src/state/State/index.ts @@ -1,4 +1,5 @@ import { Size } from '../../components/Widget'; +import LocalizedString from '../../util/LocalizedString'; import Dict from '../../Dict'; import Async from "./Async"; import { AsyncChallenge } from './Challenge'; @@ -60,4 +61,8 @@ export namespace DocumentationState { size: Size.MINIMIZED, language: 'c' }; +} + +export interface I18n { + locale: LocalizedString.Language; } \ No newline at end of file diff --git a/src/state/index.ts b/src/state/index.ts index 9acbc146..73b13f24 100644 --- a/src/state/index.ts +++ b/src/state/index.ts @@ -1,7 +1,7 @@ import { applyMiddleware, combineReducers, compose, createStore, } from 'redux'; import * as reducer from './reducer'; -import { DocumentationState, ChallengeCompletions, Challenges, Robots, Scenes } from './State'; +import { DocumentationState, ChallengeCompletions, Challenges, I18n, Robots, Scenes } from './State'; import { connectRouter, RouterState, routerMiddleware } from 'connected-react-router'; import history from './history'; import { AsyncScene } from './State/Scene'; @@ -22,6 +22,7 @@ export default createStore(combineReducers({ router: connectRouter(history), challenges: reducer.reduceChallenges, challengeCompletions: reducer.reduceChallengeCompletions, + i18n: reducer.reduceI18n, }), composeEnhancers( applyMiddleware( routerMiddleware(history) @@ -37,6 +38,7 @@ export interface State { robots: Robots; documentation: DocumentationState; router: RouterState; + i18n: I18n; } export namespace State { diff --git a/src/state/reducer/i18n.ts b/src/state/reducer/i18n.ts new file mode 100644 index 00000000..82339fd9 --- /dev/null +++ b/src/state/reducer/i18n.ts @@ -0,0 +1,26 @@ +import { I18n } from '../State'; +import construct from '../../util/construct'; +import LocalizedString from '../../util/LocalizedString'; + +export namespace I18nAction { + export interface SetLocale { + type: 'i18n/set-locale'; + locale: LocalizedString.Language; + } + + export const setLocale = construct('i18n/set-locale'); +} + +export type I18nAction = I18nAction.SetLocale; + +export const reduceI18n = (state: I18n = { locale: LocalizedString.EN_US }, action: I18nAction): I18n => { + switch (action.type) { + case 'i18n/set-locale': + return { + ...state, + locale: action.locale, + }; + default: + return state; + } +}; \ No newline at end of file diff --git a/src/state/reducer/index.ts b/src/state/reducer/index.ts index b18ce9d9..32466173 100644 --- a/src/state/reducer/index.ts +++ b/src/state/reducer/index.ts @@ -3,3 +3,4 @@ export * from './robots'; export * from './challenges'; export * from './challengeCompletions'; export * from './documentation'; +export * from './i18n'; diff --git a/src/types/globals.d.ts b/src/types/globals.d.ts index a181a889..17e5227d 100644 --- a/src/types/globals.d.ts +++ b/src/types/globals.d.ts @@ -4,3 +4,4 @@ declare const SIMULATOR_GIT_HASH: string; declare const SIMULATOR_HAS_CPYTHON: boolean; declare const SIMULATOR_HAS_AMMO: boolean; declare const SIMULATOR_LIBKIPR_C_DOCUMENTATION: unknown | undefined; +declare const SIMULATOR_I18N: unknown | undefined; diff --git a/src/util/LocalizedString.ts b/src/util/LocalizedString.ts index 6dcc5b3e..bf376d0c 100644 --- a/src/util/LocalizedString.ts +++ b/src/util/LocalizedString.ts @@ -72,7 +72,42 @@ namespace LocalizedString { // Urdu export const UR_PK = 'ur-PK'; - export const FALLBACKS: { [locale: string]: string[] } = { + export type Language = ( + typeof EN_US | typeof EN_UK | + typeof ZH_CN | typeof ZH_TW | + typeof JA_JP | + typeof KO_KR | + typeof HI_IN | + typeof ES_ES | typeof ES_MX | + typeof FR_FR | + typeof DE_DE | + typeof IT_IT | + typeof PT_BR | typeof PT_PT | + typeof RU_RU | + typeof AR_SA | + typeof TR_TR | + typeof PL_PL | + typeof NL_NL | + typeof SV_SE | + typeof DA_DK | + typeof NO_NO | + typeof FI_FI | + typeof HU_HU | + typeof CS_CZ | + typeof SK_SK | + typeof RO_RO | + typeof BG_BG | + typeof EL_GR | + typeof HE_IL | + typeof TH_TH | + typeof VI_VN | + typeof ID_ID | + typeof MS_MY | + typeof FA_IR | + typeof UR_PK + ); + + export const FALLBACKS: { [locale in Language]: Language[] } = { [EN_US]: [], [EN_UK]: [EN_US], [ZH_CN]: [EN_US], @@ -111,7 +146,7 @@ namespace LocalizedString { [UR_PK]: [EN_US] }; - export const lookup = (localizedString: LocalizedString, locale: string) => { + export const lookup = (localizedString: LocalizedString, locale: Language) => { let currentLocale = locale; const fallbacks = FALLBACKS[locale] || []; let fallbackIndex = 0; @@ -123,6 +158,84 @@ namespace LocalizedString { return localizedString[currentLocale]; }; + + export const SUPPORTED_LANGUAGES = [ + LocalizedString.AR_SA, + LocalizedString.BG_BG, + LocalizedString.CS_CZ, + LocalizedString.DA_DK, + LocalizedString.DE_DE, + LocalizedString.EL_GR, + LocalizedString.EN_UK, + LocalizedString.EN_US, + LocalizedString.ES_ES, + LocalizedString.ES_MX, + LocalizedString.FA_IR, + LocalizedString.FI_FI, + LocalizedString.FR_FR, + LocalizedString.HE_IL, + LocalizedString.HI_IN, + LocalizedString.HU_HU, + LocalizedString.ID_ID, + LocalizedString.IT_IT, + LocalizedString.JA_JP, + LocalizedString.KO_KR, + LocalizedString.MS_MY, + LocalizedString.NL_NL, + LocalizedString.NO_NO, + LocalizedString.PL_PL, + LocalizedString.PT_BR, + LocalizedString.PT_PT, + LocalizedString.RO_RO, + LocalizedString.RU_RU, + LocalizedString.SK_SK, + LocalizedString.SV_SE, + LocalizedString.TH_TH, + LocalizedString.TR_TR, + LocalizedString.UR_PK, + LocalizedString.VI_VN, + LocalizedString.ZH_CN, + LocalizedString.ZH_TW, + ]; + + export const NATIVE_LOCALE_NAMES: { [locale in Language]: string } = { + [LocalizedString.AR_SA]: 'العربية', + [LocalizedString.BG_BG]: 'български', + [LocalizedString.CS_CZ]: 'čeština', + [LocalizedString.DA_DK]: 'dansk', + [LocalizedString.DE_DE]: 'Deutsch', + [LocalizedString.EL_GR]: 'ελληνικά', + [LocalizedString.EN_UK]: 'English (UK)', + [LocalizedString.EN_US]: 'English (US)', + [LocalizedString.ES_ES]: 'español', + [LocalizedString.ES_MX]: 'español (MX)', + [LocalizedString.FA_IR]: 'فارسی', + [LocalizedString.FI_FI]: 'suomi', + [LocalizedString.FR_FR]: 'français', + [LocalizedString.HE_IL]: 'עברית', + [LocalizedString.HI_IN]: 'हिन्दी', + [LocalizedString.HU_HU]: 'magyar', + [LocalizedString.ID_ID]: 'Bahasa Indonesia', + [LocalizedString.IT_IT]: 'italiano', + [LocalizedString.JA_JP]: '日本語', + [LocalizedString.KO_KR]: '한국어', + [LocalizedString.MS_MY]: 'Bahasa Melayu', + [LocalizedString.NL_NL]: 'Nederlands', + [LocalizedString.NO_NO]: 'norsk', + [LocalizedString.PL_PL]: 'polski', + [LocalizedString.PT_BR]: 'português (BR)', + [LocalizedString.PT_PT]: 'português (PT)', + [LocalizedString.RO_RO]: 'română', + [LocalizedString.RU_RU]: 'русский', + [LocalizedString.SK_SK]: 'slovenčina', + [LocalizedString.SV_SE]: 'svenska', + [LocalizedString.TH_TH]: 'ไทย', + [LocalizedString.TR_TR]: 'Türkçe', + [LocalizedString.UR_PK]: 'اردو', + [LocalizedString.VI_VN]: 'Tiếng Việt', + [LocalizedString.ZH_CN]: '简体中文', + [LocalizedString.ZH_TW]: '繁體中文', + }; } export default LocalizedString; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 84aba17b..87baecd2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,11 @@ "target": "es6", "moduleResolution": "node", "allowSyntheticDefaultImports": true, - "esModuleInterop": true + "esModuleInterop": true, + "baseUrl": "src", + "paths": { + "@i18n": ["i18n"], + } }, "types": [ "babylonjs", diff --git a/yarn.lock b/yarn.lock index 7a35ff73..ac23e648 100644 --- a/yarn.lock +++ b/yarn.lock @@ -884,6 +884,14 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.49.tgz#3facb98ebcd4114a4ecef74e0de2175b56fd4464" integrity sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw== +"@types/gettext-parser@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/gettext-parser/-/gettext-parser-4.0.2.tgz#2048a92f137ec64fd504d62e8f407ad3b0e7e43e" + integrity sha512-fwpC5IWmQmjXSr56i5Bitw9x+pKxO1Nnjp+wyxzEIEc+87HVolbJIViIcfdMvCU8nz81Z8BYzXYwDUAihRfCnw== + dependencies: + "@types/node" "*" + "@types/readable-stream" "*" + "@types/glob@^7.1.1": version "7.1.4" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" @@ -996,6 +1004,14 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/readable-stream@*": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/redux@^3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@types/redux/-/redux-3.6.0.tgz#f1ebe1e5411518072e4fdfca5c76e16e74c1399a" @@ -1008,6 +1024,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/sprintf-js@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/sprintf-js/-/sprintf-js-1.1.2.tgz#a4fcb84c7344f39f70dc4eec0e1e7f10a48597a3" + integrity sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA== + "@types/styletron-engine-atomic@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/styletron-engine-atomic/-/styletron-engine-atomic-1.1.1.tgz#032dabd5ccea1b8601521ad38616a7a9f0af5404" @@ -1269,6 +1290,13 @@ abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1801,6 +1829,14 @@ buffer@^5.2.1: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2207,7 +2243,7 @@ content-disposition@0.5.4, content-disposition@^0.5.2: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@^1.0.4, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== @@ -2817,6 +2853,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3058,12 +3101,17 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.2.0: +events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -3719,6 +3767,16 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +gettext-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-6.0.0.tgz#201e61d92c1cc7edf8f6ee3a7e3d6ab1e061b44c" + integrity sha512-eWFsR78gc/eKnzDgc919Us3cbxQbzxK1L8vAIZrKMQqOUgULyeqmczNlBjTlVTk2FaB7nV9C1oobd/PGBOqNmg== + dependencies: + content-type "^1.0.4" + encoding "^0.1.13" + readable-stream "^4.1.0" + safe-buffer "^5.2.1" + gifsicle@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-4.0.1.tgz#30e1e61e3ee4884ef702641b2e98a15c2127b2e2" @@ -4161,7 +4219,7 @@ idb@3.0.2: resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384" integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw== -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6520,6 +6578,16 @@ readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" + integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -6750,7 +6818,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -7235,6 +7303,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"