Server & Web App of Tolgee localization toolkit

Overview

Tolgee Localization Platform

example workflow kotlin docker github release licence twitter github stars github stars discord

Tolgee

Features

  • All in One localization solution for your App 🙌
  • Localization management platform 🎈
  • Manage screenshots 📷
  • Comment on translations 💬
  • Tag keys 🏷️
  • Out of box in-context localization for web 🎉
  • Automated screenshot generation for web 📷
  • Open-source 🔥

Screenshot 2021-10-15 at 8 35 06

For more detailed documentation about Tolgee, visit tolgee.io.

Running with docker

To run Tolgee Server with docker

docker run -v tolgee_data:/data/ -p 8085:8080 tolgee/tolgee

Now you should be able to access Tolgee web application on http://localhost:8085

To learn more about deploying Tolgee server, visit this documentation page.

Configuration

For more information about configuration, visit docs.

Quick integration guides

  1. Go to your project
  2. Select integrate from side menu
  3. Follow the guide!

integrate-server-loop

Let us know what you think! #feedbackwanted ❤️

Comments
  • No dashes in environmental variables

    No dashes in environmental variables

    Hey, I just started using Tolgee and I love it. Although I just have one problem. I cannot use dashes ("-") in my env variables, so I can't use all env variables from the docs (e.g. tolgee.postgres-autostart.enabled).

    W8X2bIOdPnDF8en

    Here is my docker compose version: cTYfhtCHCqAcc50

    opened by vascYT 18
  • [BUG] When exporting as JSON, keys containing a dot (.) are converted it into nested objects.

    [BUG] When exporting as JSON, keys containing a dot (.) are converted it into nested objects.

    According to the IETF JSON RFC, essentially any string of Unicode characters may be a key in a JSON. There are no rules as to the special interpretation of a key that contains a dot (.) character as a shorthand to a nested object or any other such thing.

    One of the most popular web frameworks, Laravel, allows and suggests the use of translation strings as keys:

    For applications with a large number of translatable strings, defining every string with a "short key" can become confusing when referencing the keys in your views and it is cumbersome to continually invent keys for every translation string supported by your application.

    This results in code that's much easier to read and maintain:

        <p>
          {{__("I love programming.")}}
        </p>
    

    Instead of:

        <p>
          {{__("programming_string")}}
        </p>
    

    When importing a JSON file with such key:value entries into Tolgee it works fine. Take, for instance, this Spanish .json:

    {
        "I love programming.": "Me encanta programar."
    }
    

    Imports correctly:

    1

    Now, if we export the Spanish translation through the export tool as .json, we get the following output:

    {
      "I love programming" : {
        "" : "Me encanta programar."
      }
    }
    

    Why? Because Tolgee interprets the . at the end of I love programming. as a reference to a nested object.

    Please either bring the JSON export functionality in line with the IETF RFC or give us the option as to how to interpret the dots in the JSON keys for those who rely on such exports.

    opened by LocalMonero 15
  • feat: Darkmode

    feat: Darkmode

    I added some functionality to have a darkmode in the app. -> I added headless.ui as a new dependency in order to create this simple animation. Maybe this library could be useful in other places of the application as well as it gives the developers unstyled, but functional components and a simple transition api. Hope you enjoy

    opened by eweren 12
  • fix: consistent sorting when sort is unspecified

    fix: consistent sorting when sort is unspecified

    When no sorting was specified, Tolgee defaulted to sorting by keyId and keyName. However, the returned cursor only specified keyId and this caused subsequent requests to not use the same sorting method. This patch fixes it by only using keyId when no sort is specified.

    Regression test included.

    closes #1345

    bug released on @latest 
    opened by cyyynthia 9
  • Azure Cognitive machine translation

    Azure Cognitive machine translation

    Added support for Azure Cognitive machine translation provider (only paid version). First time developing using Kotlin, take that into consideration please.

    API docs - https://docs.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-translate#request-url

    released on @latest 
    opened by adirh3 9
  • Netty SocketIO thrown Null Pointer Exception.

    Netty SocketIO thrown Null Pointer Exception.

    Hi,

    I try to launch tolgee in kubernetes (I create a testing helm chart here : https://github.com/throrin19/helm-tolgee)

    But, when I try to launch tolgee, I have this log error and I don't understand why :

    2022-06-10 07:53:50.312 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
    --
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.356 INFO 1 --- [ main] io.tolgee.Application$Companion : Started Application.Companion in 30.007 seconds (JVM running for 31.248)
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.356 INFO 1 --- [ionShutdownHook] i.t.c.SocketIoServerCommandLineRunner : Netty SocketIO thrown Null Pointer Exception.
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.445 WARN 1 --- [ionShutdownHook] .s.c.a.CommonAnnotationBeanPostProcessor : Destroy method on bean with name 'postgresEmbeddedRunner' threw an exception: kotlin.UninitializedPropertyAccessException: lateinit property proc has not been initialized
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.501 INFO 1 --- [ main] ConditionEvaluationReportLoggingListener :
    Fri, Jun 10 2022 09:53:50 |  
    Fri, Jun 10 2022 09:53:50 | Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.532 INFO 1 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.535 INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.543 ERROR 1 --- [ main] o.s.boot.SpringApplication : Application run failed
    Fri, Jun 10 2022 09:53:50 |  
    Fri, Jun 10 2022 09:53:50 | org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'initialUserCreatorCommandLineRunner': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
    Fri, Jun 10 2022 09:53:50 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220) ~[spring-beans-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:671) ~[spring-beans-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:659) ~[spring-beans-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1300) ~[spring-context-5.3.19.jar:5.3.19]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:754) ~[spring-boot-2.6.7.jar:2.6.7]
    Fri, Jun 10 2022 09:53:50 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-2.6.7.jar:2.6.7]
    Fri, Jun 10 2022 09:53:50 | at io.tolgee.Application$Companion.main(Application.kt:29) ~[app/:na]
    Fri, Jun 10 2022 09:53:50 | at io.tolgee.Application.main(Application.kt) ~[app/:na]
    Fri, Jun 10 2022 09:53:50 |  
    Fri, Jun 10 2022 09:53:50 | 2022-06-10 07:53:50.545 INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
    

    The log says to launch application with debug option. I did not see mention of this option in tolgee env variables.

    Thanks for your help

    Edit : The error seems to be the socker.io server. I try to disable it with the env tolgee.socket-io.enabled but I have no change 😞

    opened by throrin19 8
  • Project/Organization creation on self hosted instance

    Project/Organization creation on self hosted instance

    It appears localization data actually has the translation text, except the key has an extra _error at the end (see en.json#L202.) It seems other keys have this extra _error at the end, so there might be other keys with the same issue.

    image

    opened by cyyynthia 8
  • [Feature Request]OpenID/Oauth2 or SAML authentication

    [Feature Request]OpenID/Oauth2 or SAML authentication

    Hello,

    Your project lokk amazing and we are really interested to use it. But, in our case, we use an authentication service (authentik in our case) and we wonder if it is planned to be able to manage tolgee users by this way?

    You manage github and google users but being able to manage users coming from any authentication service (auth0, authentik, ...) would be a great advantage.

    Thanks again for the work you do

    opened by throrin19 7
  • feat: Implement Google oauth login

    feat: Implement Google oauth login

    Especially for companies, the integration of Google as an authorization service is very attractive. This PR extends the oauth login for Google. There is also an option tolgee.authentication.google.workspace-domain: "domain.com" to restrict authentication to members of the workspace only,

    However, there are some adjustments that need to be made to the following components:

    • The frontend handling, as it would be too complex if two (or in the future more Oauth providers) are handled in this component. Outsourcing the functions to OAuthService.tsx seems to make the most sense to me here, am open to other suggestions.
    • The transmission of the code to the backend was changed from PathVariable to RequestParameter, because the Google code contains a slash, that would be difficult to encode this correctly. In addition, the parameter redirect_uri is now a part of the API request by default, because Google needs this to verify the request.

    So please give me feedback and your opinions about this PR. Thanks for the project

    opened by waigel 7
  • Support for .ini files

    Support for .ini files

    I would like to request the support for .ini files as the source of the languages. There are plenty packages to convert the .ini files to a key-value array so this should be quite straight forward.

    Thanks

    opened by dgrammatiko 7
  • Backend documentation

    Backend documentation

    I am trying to get the spring backend up and running in order to try things out regarding webhooks. Since I am new to spring I don't have experience in getting those kind of projects up and running. Therefore it would be nice to have some documentation.

    opened by eweren 7
  • Have the option of disabling parameter checking for a project

    Have the option of disabling parameter checking for a project

    ... or improve it to recognize embedded language codes.

    In our reference text, we have variables like ${foo} and it's awesome that Tolgee is aware of those and helps warn translators. However, in our case, we also have localized variables, so we do ${foo_es-ES} if the Spanish variable should be injected. Translators are now getting warned if they change from ${foo_es-ES} to ${foo_es-MX} as they should (because they changed the variable name.

    The warnings they get now is confusing to them and they think they did something wrong.

    Can we either:

    • Have a checkbox to disable this feature (as sad as that makes me, because it's an awesome feature)
    • Or somehow recognize that if one of the project language codes appears in it, confirm that it matches the language (this is probably too opinionated/specific though for the general platform)
    opened by jdimeo 0
  • Ability to chat with co-translators

    Ability to chat with co-translators

    Request from customer. He's not able to chat with co-translators as translation comments are impractical and he's not even able to get contact info about his co-workers.

    opened by stepan662 0
  • Oauth2 using Gitlab fails with third_party_auth_unknown_error

    Oauth2 using Gitlab fails with third_party_auth_unknown_error

    I am configuring Tolgee to use Gitlab as a provider. This is the configuration I am using:

    tolgee.authentication.oauth2.client-id=<REDACTED>
    tolgee.authentication.oauth2.client-secret=<REDACTED>
    tolgee.authentication.oauth2.scopes=read_user
    tolgee.authentication.oauth2.authorization-url=https://gitlab.com/oauth/authorize
    tolgee.authentication.oauth2.token-url=https://gitlab.com/oauth/token
    tolgee.authentication.oauth2.user-url=https://gitlab.com/api/v4/user
    

    In Gitlab, I have created an application (Group wide) with http://tolgee.docker.localhost/login/auth_callback/oauth2 as the callback URL, and I have granted the read_user permission. I also tried enabling openid, profile and email roles but the error is always third_party_auth_unknown_error on the UI, and in the console the following is printed:

    2022-12-24 12:20:53.224 ERROR 1 --- [nio-8080-exec-6] i.t.security.third_party.OAuth2Delegate  : Error while getting token from third party: 403 Forbidden: [no body]
    

    Am I doing something wrong?

    opened by pennal 3
  • Rest API Doc out of date

    Rest API Doc out of date

    Hi,

    I am trying to implement a simple import/export script to integrate Tolgee in a CI/CD workflow and I am constantly hitting errors with the API. The current documentation (especially around the fields and explanations of the parameters) is not consistent to what the code is doing behind the scenes.

    I have currently started to sniff out the requests made by the UI since those seem to work, but this is not sustainable in the long run. An example is the <host>/v2/projects endpoint which is not in the Docs, but is heavily used by the UI.

    Also, would you consider allowing the export of the OpenAPI spec so a library (and the different DTOs) could be generated on the fly?

    opened by pennal 6
  • Make the gray sweeter in white mode

    Make the gray sweeter in white mode

    • [ ] Set background of small component with grey background to rgb(247, 247, 247) - dropdowns, tags, activity item labels
    • [ ] Set background of large component with grey background to rgb(250, 250, 250) - tiles in project dashboard
    opened by JanCizmar 0
Releases(v2.51.1)
Owner
Tolgee
Developer tool for web apps localization 🐁 Simple to deploy & easy to use
Tolgee
Kotlin script to prevent invalid conversion errors in projects with many localization files

Localization-Patterns-Checker Kotlin script to prevent invalid conversion errors

Бырна Алексей 1 Dec 26, 2021
LocalisationDemo - A sample project to demonstrate localization in android

LocalisationDemo This is a sample project to demonstrate localization in android

shubham423 0 Jan 8, 2022
Distance Sensor Localization Library created by FTC 16439, AlphaGo

AGDistanceLocalization A simple and easy-to-use library, written in Kotlin, to aid in the process of localizing your robot using Distance Sensors! Thi

AlphaGo 3 Nov 3, 2022
Web Container: A simple web container library for Android to help fellow developer to open WebView easily

WebContainer Description Web Container is a simple web container library for And

Achmad Ichsan Thaib 8 Nov 22, 2022
Live-coding a web server with Ktor

ktor-sample Live-coding a web server with Ktor Ktor is a Kotlin framework dedicated to building asynchronous servers and clients in connected systems.

Renaud Mathieu 1 May 10, 2022
FirestoreCleanArchitectureApp is an app built with Kotlin and Firestore that displays data in real-time using the MVVM Architecture Pattern. For the UI it uses Jetpack Compose, Android's modern toolkit for building native UI.

FirestoreCleanArchitectureApp FirestoreCleanArchitectureApp is an app built with Kotlin and Cloud Firestore that displays data in real-time using Andr

Alex 66 Dec 15, 2022
Allowing server admins to backdoor their own server!

DiscordBackdoorBot Allowing server admins to backdoor their own server! What does Discord Backdoor Bot do? Discord Backdoor bot allows the bot owner t

Awesomemoder316 1 Jun 8, 2022
Jambeez-server - Jambeez server with kotlin

jambeez-server How to start Start your own server with: docker pull ghcr.io/jamb

null 5 Apr 2, 2022
Example project for using the Selenium toolkit with Kotlin, Maven, TestNg and the config is managed via a property file.

Selenium-Java-Toolkit-TestNg-Playground This is the sample-Project and show you how to use the Selenium-Toolkit. The Selenium-Toolkit is a Java based

Selenium Consulting 0 Dec 15, 2021
Restful Toolkit for IntelliJ IDEA

restful-toolkit Template ToDo list Create a new IntelliJ Platform Plugin Template project. Get known with the template documentation. Verify the plugi

KeepWalking... 56 Dec 14, 2022
A basic, incomplete, buggy, far from efficient UI toolkit for Kotlin/Android. An experiment for fun and to learn.

Apex Apex is just a simple proof of concept to demonstrate how easily you can build your own UI Toolkit from scratch. This code base is most likely fu

Romain Guy 79 Sep 7, 2022
A basic, incomplete, buggy, far from efficient UI toolkit for Kotlin/Android. An experiment for fun and to learn.

Apex Apex is just a simple proof of concept to demonstrate how easily you can build your own UI Toolkit from scratch. This code base is most likely fu

Romain Guy 79 Sep 7, 2022
A sample skeleton backend app built using Spring Boot kotlin, Expedia Kotlin Graphql, Reactive Web that can be deployed to Google App Engine Flexible environmennt

spring-kotlin-gql-gae This is a sample skeleton of a backend app that was built using: Spring Boot(Kotlin) Reactive Web Sprinng Data R2DBC with MYSQL

Dario Mungoi 7 Sep 17, 2022
A springboot secure web app with thymeleaf support.

kotlin-web-maven-spring-thyme-challenge-question-aes-encoded-scrypt-encode Description A springboot secure web app with thymeleaf support. Three roles

null 0 Nov 23, 2021
A springboot secure web app with jsp support.

kotlin-web-maven-spring-jsp-register-rsa-encrypt-argon2-encoded Description A springboot secure web app with jsp support. Three roles are defined; USE

null 0 Nov 24, 2021
Playground server-client Android app using gRPC and protocol buffers

gRPC Playground The goal of this app is to connect to a server, exchange information using the gRPC protocol and lastly retrieve some mocked credentia

Thanos Psaridis 8 Sep 14, 2022
Collection of Rewrite Recipes pertaining to the JHipster web application & microservice development platform

Apply JHipster best practices automatically What is this? This project implements a Rewrite module that applies best practices and migrations pertaini

OpenRewrite 5 Mar 7, 2022
Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

JetBrains 10k Jan 7, 2023
A clone of hn.premii.com implemented in KMP with Web (React), iOS (Swift UI), Android and Desktop (Compose) UIs

An clone of hn.premii.com implemented in Kotlin Multiplatform with shared Android/Desktop Compose UI, SwiftUI on iOS and React for Web This example su

Tarek Belkahia 7 Feb 5, 2022