Giter Site home page Giter Site logo

neoslocale's Introduction

Neos Locale

This repository contains the locale assets for the core UI of Neos VR (www.neos.com) and allows anyone to contribute translations. The contents of this repository will be periodically merged with the public build released on Steam (https://store.steampowered.com/app/740250/Neos_VR/) and other platforms.

Localization Status

Czech [cs] - 100.0% - Missing keys: 0
German [de] - 96.2% - Missing keys: 66
English (United Kingdom) [en-gb] - 2.0% - Missing keys: 1724
English [en] - 100.0% - Missing keys: 0
Esperanto [eo] - 83.7% - Missing keys: 287
Spanish [es] - 99.3% - Missing keys: 13
Estonian [et] - 59.3% - Missing keys: 716
Finnish [fi] - 90.4% - Missing keys: 168
French [fr] - 83.8% - Missing keys: 285
Icelandic [is] - 33.9% - Missing keys: 1163
Japanese [ja] - 100.0% - Missing keys: 0
Korean [ko] - 100.0% - Missing keys: 0
Dutch [nl] - 94.4% - Missing keys: 98
Norwegian [no] - 47.1% - Missing keys: 930
Polish [pl] - 77.8% - Missing keys: 390
Russian [ru] - 100.0% - Missing keys: 0
Swedish [sv] - 14.2% - Missing keys: 1510
Turkish [tr] - 55.4% - Missing keys: 784
Chinese (China) [zh-cn] - 68.5% - Missing keys: 554
Chinese (Taiwan) [zh-tw] - 65.2% - Missing keys: 613

Total keys: 1804

How To Contribute

If you'd like to contribute translations, create a branch or fork of this repository, make the changes and once they are ready to be merged create a Pull Request, so the contributions can be checked and merged. You don't need to translate everything at once, if you only cover part of the UI, the changes can be merged, with more translations coming later.

Do's and don'ts

  • Make sure the .json locale file is UTF8 encoded

  • Always keep the "Dummy" : "Dummy" entry at the bottom of the file. This way you don't have to remember to remove the comma at the end of the last entry every time

  • Copy & Paste the whole content of the file into this online validator to ensure you don't have any syntax errors: https://jsonformatter.curiousconcept.com/

  • DO use spaces instead of tabs to keep the formatting of all documents consistent

  • DO check if other users are making modifications to the same locale as you are in Issues and coordinate. If you send changes that conflict with other users, it's hard to resolve them on our end since we don't understand the language.

  • DO keep the same style of formating and coloring where it's present in the text to ensure it stays consistent across locales. Coloring in particular can be contextual and used in other parts of the UI and changing or removing it would cause user confusion.

  • DON'T update the Localization Status section of this document, it is automatically generated when changes are merged

  • DON'T update the MISSING.md file manually, it's automatically generated as part of the build process based on the changes you submit

  • DON'T convert the formatting of the entire document. This creates major merge conflicts and makes it hard to track what was actually changed, plus it introduces inconsistencies

  • DON'T correct mistakes in the string keys, only report them. They will be fixed by a script, which will apply the correction to all locales at once.

  • DON'T submit purely machine translated locales. Those often result in odd and confusing results for user interfaces. Using machine translation as basis for manual translation is ok.

Translating the Store descriptions

If you like, you can help translate the store descriptions as well (this is used on Steam for example), but we consider those highly optional since it's quite a lot of text. If you don't want to translate those, don't worry about them! The store descriptions do not count towards the translation completeness percerntage and are provided in separate files.

If you do translate them and you haven't added a credit yet, put your name in the regular .json file for translations of in-game strings, even if you haven't translated any in-game strings.

If you're contributing a new language

  1. Create a new Issue (https://github.com/Neos-Metaverse/NeosLocale/issues) for given language in format "Language [lang-code]", for example "English [en]", which will help coordinate efforts of different translators.

  2. Verify that Neos' fork of ICU MessageFormat.NET has pluralizer for your language, by checking the "AddStandardPluralizers()" function in this file: https://github.com/Neos-Metaverse/messageformat.net/blob/master/src/Jeffijoe.MessageFormat/Formatting/Formatters/PluralFormatter.cs

If you can't find your language code in this file, please make a Issue either on the official Neos issue tracker (https://github.com/Neos-Metaverse/NeosPublic/issues) or in this repository.

Alternatively you can implement the pluralizer yourself based on the reference from the Unicode CLDR repository: https://github.com/unicode-org/cldr/blob/master/common/supplemental/plurals.xml and make a pull request for it to be merged with our fork or MessageFormat.NET

  1. Add a new [lang-code].json file to your fork. We highly recommend creating a skeleton file first without any translation strings, just containing the Locale and Authors and creating a pull request, so it's clearer to other contributors that translations are being worked on by someone.

Contributing translations to a language

If you'd like to contribute translations for an existing language file (or one you have just created), we recommend the following:

  1. Make a fork of the repository or your own branch.
  2. Update the language file, either by modifying the translation strings or adding new ones for missing translations.
  3. Ensure you do not have any left-over English strings in the file. Your file should only contain actually translated strings. Any missing strings will automatically fallback (see below for details)
  4. Ensure your modified translation file works correctly in Neos (see below how to test)
  5. Create a Pull Request for your translations to be merged into the main repository. After merging they will be available publicly in the next public build of Neos.

As Neos develops, we'll be constantly adding new strings in English or modifying the existing ones. We recommend watching the repository for activity through GitHub, so you can get notified when there are changes and new strings to be translated.

Testing your translation in Neos

As you work on the translation we recommend that you periodically check it inside of Neos. This will not only help ensure that you don't have any syntax errors, but also make sure that the strings are correct in the context.

To test the translation, find the folder where Neos.exe is installed (on Steam, you can do so by right clicking Neos, going to Properties -> LOCAL FILES -> BROWSE LOCAL FILES...) and then locate the "Locale" folder. Simply place your modified file into this folder and Neos will load it up.

By default, Neos uses your system locale to determine which file to load. You can override this by going to Settings and changing the "Override Locale" to a different language code.

  • You can edit the translation file on the fly without shutting down Neos. To force it to reload, change the locale to "en" and then back to your own.
  • Note that while most UI will change language immediately, not all of it does. Simply close and reopen the UI dialog to load the translated strings.
  • If the string is showing in English, you probably have a typo in the string key. It needs to match exactly.
  • If the translation isn't loading in Neos, it is likely a JSON syntax error preventing it from being loaded.
  • If you see "ERROR!!!" instead of your translated string, you have a syntax error in the particular string. Check Neos' log file, which will contain details.

The ICU MessageFormat Syntax for translation strings

Neos uses the ICU MessageFormat Syntax defined by the Unicode organization for its localized strings. This offers high amount of flexibility on how you translate strings and ensures that you can correctly follow the grammar rules of your language, particularly with regards to pluralization (e.g. displaying "1 item" vs "1 items"). This is why it's important to ensure that your language has a pluralizer implemented in our fork of MessageFormat.NET

To learn more about the ICU MessageFormat Syntax check the following links: https://unicode-org.github.io/icu/userguide/format_parse/messages/

Formatting guide with examples (the C# version of the library currently doesn't implement all the formatters, but they will be added as needed): https://messageformat.github.io/messageformat/page-guide

Language pluralization rules: https://github.com/unicode-org/cldr/blob/master/common/supplemental/plurals.xml

Typically most strings are straight up replacements, with no complex syntax. Some use just a simple variable replacement (e.g. {name}), which will replace part of the message with given variable.

For cases when the structure of a sentence changes based on the value of a number, you'll see the pattern {variable, plural, ...}. Each language has a set of plural categories, like zero, one, two, few, many and other. Some languages have only "other", some (like English) have "one" and "other", while other languages have multiple. Make sure that you familiarize yourself with the plural categories in your language (using the links above) so you can correctly translate strings using this syntax.

Another common syntax is using the {variable, select, ...} form. This lets you match the variable against specific values and provide translated versions of each. You can either replace a single word (e.g. "Server status is {status, select, good {Good} bad {Not Good} }") or the whole sentence (e.g. "{status, select, good {Server is good!} bad {Oh no, servers are down!}}") depending on what works better in your language.

Please let us know if you have any questions or are unsure about certain things.

Language codes and fallbacks

Neos uses the IETF language tags (https://en.wikipedia.org/wiki/IETF_language_tag) to load locales. These consist of a single primary language tag (typically a two-letter language code from ISO 639-1 or a three-letter code from ISO 639-2 (1998), ISO 639-3 (2007) or ISO 639-5 (2008)) and an optional region subtag with country code.

When loading a locale file, Neos will first check for the most specific locale file. Then it will load any missing strings from the general locale file and last it will load any missing strings from the English locale.

For example if your system locale is British English (en-gb), it will first look for the "en-gb.json" file and then for the more general "en.json" one.

We recommend putting most translations into the general language file (single two letter or three letter code) and if necessary only put specific overrides into the more specific language file. That way, most translations can be shared across variants of the language if possible.

Any strings you don't translate at all will also fall back into their English variants, so you don't have to worry about missing some of them, they can be translated later (or by another contributor). This also ensures that newly added strings in the English locale will show up and can be gradually translated as they come.

What if I find a string that cannot be translated?

While the majority of Neos' UI has been converted to the localization system, there are likely still a few stragglers and some parts that aren't translatable right now. If you encounter such a place, create an Issue on this repository, ideally with a screenshot of the non-translatable part, so we can convert it as well.

Currently there are a few known parts that cannot be translated, but are planned to:

  • Enumerations (e.g. certain tool options that cycle through several options)
  • Component names and categories (component names will still show original for technical reasons, but will show optional translation for non-English languages)
  • LogiX node names and categories (same as above)
  • Component fields (those will only show optional translated names on hover once the tooltip system is implemented)

If you use an external tool to do the translation and the JSON structure gets mangled

You can use the python script in this repository: CleanJSON.py

For example, to clean the french json, you'd use ./CleanJSON.py --en en.json --lang fr.json --out fr.json.cleaned


This script will reformat a Babel style JSON for locales to match the en.json
baseline formating for git changes purposes.

optional arguments:
  -h, --help        show this help message and exit
  --en en_path      The path to the en.json Neos locale.
  --lang lang_path  The path to the LANG.json Neos locale to clean.
  --out out_path    The path to save the formated file.

Any questions?

If you have questions or are unsure about something, you can create an Issue on this repository or reach out to our team on the official Discord: https://discord.gg/neosvr

neoslocale's People

Contributors

aesc3625 avatar airride91 avatar anotherfoxguy avatar aragubas avatar archer-the-rat avatar art0007i avatar atakiya avatar blazevr avatar brodokk avatar ducky07 avatar dustincomp avatar elektrospy avatar enverex avatar foxy-1423 avatar frooxius avatar jeanahelver avatar kazu0617 avatar lua-nia avatar melnus avatar mirpasec avatar mr-alex42 avatar nammi-namm avatar orange3134 avatar probableprime avatar rampa3 avatar rueshejn avatar ruzeh3d avatar shadowpanther avatar skywindkitsune avatar yellowcrash10 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neoslocale's Issues

Missing translation keys on the Light Tip

There's translation missing on the default light tooltip's context menu:

  • Change color
  • Shadows: {shadow_type}
  • Shadow types themselves: None, Hard, Soft
    Screenshot:
    image

Esperanto [eo]

Translated to Esperanto
Aldoni dosieron pri Esperanta Lokalo

British English [en-GB]

I decided to do a specific British English variant. Currently only find Colour spelled differently. Up for anyone else to submit more corrections.

Russian [ru]

Me and my friend BrotiwkaS are workin on that. I translated almost 60% already.

Turkish [tr]

Have everything by now I think, if you find something odd please contribute or let me know :)

Portuguese [pt_PT]

Starting translation on continental Portuguese. I do not plan on translating for the Brazilian dialect, so feel free to do so if you intended to. If you wanna correct my translation, by all means, I am not perfect. I'll keep an eye on this issue to my best abilities, if any "issues" come up.

Request: Point Clouds with an option to fix the point size, instead that the point size get smaller when the user get closer.

Hello Neos Team.

I am experimenting in Neos with real volumetric video recordings. At the moment I use 2 Azure Kinect locally matched and recorded(Frontand Back) (soon 4 sensors from all sides). I export then PLY Streams, this stream I import to Neos as they are PLY Point Cloud they have the typical behaving of an Point Cloud. I mean that the point size gets smaller when the user get closer. I would love to have the chance to set the point size to a fixed size not only to keep the solid look of an point cloud as well to reduce the points and rise the point size accordingly to the imported file that I can maybe even reduce the amount of points. I experimented with 300 frames and of an 30fps recording each frame is around 10mb, this is already a 60% compression of the original size and I could compress to 85 or 90% (5mb or 3,5mb) if I would be able to fix or adjust the point size ... the super extreme version would be that each point could be handled as particle cast ... this would allow to create very advance looks of moving volumetric Point Cloud recordings, but for the moment I would first of all request a adjustable point size to an float or an int ... I hope this will be possible ...

Thx and greatings
Martn D.
https://www.martnd.com
https://vimeo.com/martnd
https://sketchfab.com/MartnDe

Somehow by this message it is now public ... that Neos is one of the first Social VR platforms which can handle real Volumetric Video. (you can walk around the recording and see the recorded character really from all side so not "fake volumetric".

I would be more then happy to show my volumetric recording result inside of neos to the neos team, I plan as celebration of volumetric video inside of NEOS a open house concert with recorded artists inside of my private "digital twin" flat which I imported in NEOS.

Finnish / Suomi [fi]

I've started working on the Finnish translation few days ago. Going to be posting the .JSON file of what I have so far.

Unable to localize certain texts on the session information window

Describe the bug

The values for "World.Detail.Uptime" and "World.Detail.PublishDate" and "World.Detail.ModifyDate" can not be localized.

To Reproduce

  1. Open up the Session Information Window
  2. The value for "World.Detail.Uptime" shows "1 minutes 52 seconds"
  3. The value for "World.Detail.PublishDate" shows "537 days ago"
  4. The value for "World.Detail.ModifyDate" shows "21 days ago"

Expected behavior

The value should be localizable (eg. {days} day(s) ago) => "vor {2} Tagen"

Screenshots / Video

image

Oddly-worded Autosave Interval String

While translating, I noticed the string for World.Config.AutosaveInterval is oddly worded. It says "Autosave every minutes:", but it would be more logical if it said "Autosave interval (minutes):". It would then follow the format of a similar option on that screen, "Cleanup interval (seconds)".

Spanish [es]

Starting on Spanish translation.
Comenzando con la traducción al español.

Editorconfig?

Wouldn't it be a good idea to have an .editorconfig file to ensure all lang files have the correct charset, indent-style, linebreaks and EOFs?

A template .editorconfig that follows the current en.json format can be found below

root = true

[*.json]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
insert_final_newline = true

English [en]

This is the primary / source language for the Neos. However contributions are still welcome for correcting mistakes or improving wording and formatting.

Typos found in the string IDs

@Frooxius I have found typos in the string IDs, for the light sources wizard. I have them fixed in CS and EN copies that will come in my next PR. A check of Neos might be needed to make sure that these are not in the source code too.

obrazek

Wrong & Unused keys

While checking translations, I noticed that some strings configurable in the locales are not used in the UI:

  • The registration dialog uses the key Account.Email twice, instead of using Account.RepeatEmail for the second field.
    image

  • World.AccessLevel.* match the options on the Session Settings screen but don't seem to be used.
    image

Testing webhook

Testing if the GitHub Feed on Discord works for the NeosLocale repository.

A small error in the Steam store localization file

Found a small error in the source (en) Steam store localization file - the list closing tag is misplaced in the updated version:
image
Should I fix this and commit it with my translation (already fixed this problem in it)?

Big thanks to everyone for your contributions! We're giving 25 GB Neos storage boost to everyone*

First I wanted to say, thanks so much everyone for helping translate Neos into so many different languages! I didn't expect to see this many so soon, but it's really cool to see Neos in different locales (even if I can't understand them) :D

As small show of thanks we're giving permanent 25 GB storage boost to all contributors. If you have contributed, I recommend to put your Neos username into the "Authors" list in the translation file.

I've already awarded all the existing ones, you should receive a thanks message in Neos and see your storage go up by 25 GB. If you were missed, please let me know here!

  • Also mandatory asterisk on "everyone". We might not grant this for trivial/unecessary contributions, e.g. people just changing one or two lines, to avoid people abusing this system to get more storage. Not a problem I see happening right now, but I thought to just note it to make sure. On such contributions the Pull request will likely just not get merged anyways.

Korean [ko]

NEOS VR 한국어 번역을 시작합니다. 업데이트 갱신 요청은 매월 1일에 진행됩니다. 해당 기간동안 이슈에 번역의견이나 기존의견에 대한 이견을 작성해 주시면 조정되거나 반영하여 요청을 할 예정이니, 개별 업데이트 시 확인 부탁드립니다.

** 기술용어는 발음을 그대로 사용합니다. (ex. Material)
** 유사발음은 인식 가능한 정도에서 사용합니다. (ex. 마테리얼, 머터리얼, 메터리얼)
** 될 수 있는한 명확하게 번역합니다. (직역이 직관적이지 않는 경우, 의역으로 처리)


** 번역 관련하여 변화가 빠른경우, 즉시 선적용 합니다.**

ColliderUserTracker doesn't deregister users on respawn

Steps to replicate:

  • Have a user inside the volume of a collider using a ColliderUserTracker
  • Respawn the user
  • The user remains listed under _usersInside and the IsAnyUserInside and IsLocalUserInside (if applicable) remain checked
  • If the user re-enters the collider volume, a second entry is added for them under the _usersInside
  • If they exit the volume normally their entries will clear normally as expected

Issue observed by Turk.

Chinese [zh- cn/tw]

Mainly: Create a question for the issue of font differences
For each language, see below

#10 简体中文[zh-cn] #10
#18 繁體中文 [zh-tw] #18

[Discussion] German sharp s "ß" use

Question here is if it makes sense?
In german the double s ( ß ) is used for (ss) though in austria and switzerland we don't use it and just use (ss) instead.

Given there's 2 german languages that don't use it. Does it make sense for it to exist in de-DE?
We could instead push austrian, swiss and german together into one translation and spare de-AT and de-CH

Anyone else got comments about this? Would be interesting to know.

Czech [cs]

Coordination for the Czech locale. Initial translation was done during the conversion of Neos to the new localization system, but might need another pass after.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.