Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translations are being submitted with userId values of null #412

Closed
jbphet opened this issue Jun 9, 2023 · 21 comments
Closed

Translations are being submitted with userId values of null #412

jbphet opened this issue Jun 9, 2023 · 21 comments
Assignees

Comments

@jbphet
Copy link
Contributor

jbphet commented Jun 9, 2023

While working on phetsims/perennial#326 I found a number of instances of sims with userId values of null for all string entries in the file. Here is an example of a commit where this is happening: phetsims/babel@5686531.

We'll need to figure out why this is happening and correct it.

@jbphet jbphet self-assigned this Jun 9, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jun 9, 2023

And, if possible, we should probably fix the current string files that have this problem.

@jbphet
Copy link
Contributor Author

jbphet commented Jun 9, 2023

Below is a list of the string files that have at least one instance of null for the user ID. There are 97 of them. Yikes. To generate this list, I used the command grep -l "userId.: null" */*.json from the babel directory.

area-builder/area-builder-strings_ro.json
atomic-interactions/atomic-interactions-strings_sv.json
balancing-chemical-equations/balancing-chemical-equations-strings_ku.json
blackbody-spectrum/blackbody-spectrum-strings_ku.json
build-a-fraction/build-a-fraction-strings_ku.json
build-a-nucleus/build-a-nucleus-strings_hu.json
build-a-nucleus/build-a-nucleus-strings_ro.json
build-an-atom/build-an-atom-strings_mk.json
calculus-grapher/calculus-grapher-strings_el.json
calculus-grapher/calculus-grapher-strings_es.json
calculus-grapher/calculus-grapher-strings_hy.json
calculus-grapher/calculus-grapher-strings_pl.json
calculus-grapher/calculus-grapher-strings_sv.json
center-and-variability/center-and-variability-strings_az.json
circuit-construction-kit-ac-virtual-lab/circuit-construction-kit-ac-virtual-lab-strings_uk.json
circuit-construction-kit-common/circuit-construction-kit-common-strings_ca.json
circuit-construction-kit-common/circuit-construction-kit-common-strings_ha.json
circuit-construction-kit-common/circuit-construction-kit-common-strings_uk.json
circuit-construction-kit-dc/circuit-construction-kit-dc-strings_ca.json
collision-lab/collision-lab-strings_ha.json
coulombs-law/coulombs-law-strings_bg.json
coulombs-law/coulombs-law-strings_ha.json
curve-fitting/curve-fitting-strings_hi.json
density-buoyancy-common/density-buoyancy-common-strings_fr.json
energy-forms-and-changes/energy-forms-and-changes-strings_ha.json
energy-skate-park/energy-skate-park-strings_ca.json
energy-skate-park/energy-skate-park-strings_ha.json
expression-exchange/expression-exchange-strings_hi.json
faradays-law/faradays-law-strings_fi.json
faradays-law/faradays-law-strings_ha.json
faradays-law/faradays-law-strings_vi.json
forces-and-motion-basics/forces-and-motion-basics-strings_vi.json
fourier-making-waves/fourier-making-waves-strings_fr.json
fraction-matcher/fraction-matcher-strings_lt.json
fractions-common/fractions-common-strings_az.json
fractions-common/fractions-common-strings_ku.json
fractions-common/fractions-common-strings_lt.json
friction/friction-strings_ro.json
gene-expression-essentials/gene-expression-essentials-strings_bg.json
graphing-lines/graphing-lines-strings_az.json
graphing-quadratics/graphing-quadratics-strings_az.json
graphing-slope-intercept/graphing-slope-intercept-strings_az.json
gravity-force-lab-basics/gravity-force-lab-basics-strings_bg.json
gravity-force-lab/gravity-force-lab-strings_bg.json
greenhouse-effect/greenhouse-effect-strings_bg.json
inverse-square-law-common/inverse-square-law-common-strings_bg.json
john-travoltage/john-travoltage-strings_es.json
john-travoltage/john-travoltage-strings_vi.json
joist/joist-strings_az.json
joist/joist-strings_bg.json
joist/joist-strings_fr.json
joist/joist-strings_hy.json
joist/joist-strings_ku.json
joist/joist-strings_ro.json
joist/joist-strings_sv.json
joist/joist-strings_vi.json
mean-share-and-balance/mean-share-and-balance-strings_az.json
molarity/molarity-strings_de.json
molecules-and-light/molecules-and-light-strings_es.json
my-solar-system/my-solar-system-strings_bg.json
my-solar-system/my-solar-system-strings_fr.json
my-solar-system/my-solar-system-strings_sr.json
natural-selection/natural-selection-strings_bg.json
neuron/neuron-strings_bg.json
number-compare/number-compare-strings_sv.json
number-line-distance/number-line-distance-strings_es.json
number-line-operations/number-line-operations-strings_az.json
number-line-operations/number-line-operations-strings_bg.json
number-play/number-play-strings_az.json
number-play/number-play-strings_pl.json
number-play/number-play-strings_ro.json
number-suite-common/number-suite-common-strings_az.json
number-suite-common/number-suite-common-strings_fr.json
number-suite-common/number-suite-common-strings_ro.json
number-suite-common/number-suite-common-strings_sv.json
ph-scale/ph-scale-strings_ro.json
ratio-and-proportion/ratio-and-proportion-strings_om.json
rutherford-scattering/rutherford-scattering-strings_lt.json
scenery-phet/scenery-phet-strings_az.json
scenery-phet/scenery-phet-strings_bg.json
scenery-phet/scenery-phet-strings_de.json
scenery-phet/scenery-phet-strings_es.json
scenery-phet/scenery-phet-strings_fr.json
scenery-phet/scenery-phet-strings_ha.json
scenery-phet/scenery-phet-strings_hy.json
scenery-phet/scenery-phet-strings_ro.json
scenery-phet/scenery-phet-strings_sv.json
shred/shred-strings_ro.json
solar-system-common/solar-system-common-strings_bg.json
solar-system-common/solar-system-common-strings_fr.json
states-of-matter/states-of-matter-strings_it.json
states-of-matter/states-of-matter-strings_sv.json
tangible/tangible-strings_om.json
vector-addition/vector-addition-strings_az.json
vegas/vegas-strings_ku.json
wave-interference/wave-interference-strings_bg.json
waves-intro/waves-intro-strings_bg.json

@jbphet
Copy link
Contributor Author

jbphet commented Jun 13, 2023

I've run some tests and looked through the code, and I have a preliminary hypothesis about why this is happening. The way the code is structured, when the user submits a translation, the client-side code requests the "website user data" from the server, then submits this data as part of the whole translation submission. However, I'm not seeing any handling in the client-side code of the case where the user's session has timed out. To test this theory out, I added a button to the admin page through which the user's login credentials could be logged to the dev tools console, then logged in, went to that page and waited for 15 minutes, then pressed the button. The request failed, which would seem to support this theory.

I'll dig into this some more tomorrow, but if this is true we may need to consider another way of associating a submission with a user ID.

@mattpen
Copy link
Contributor

mattpen commented Jun 13, 2023

I think this hypothesis is sound. I think there are 2 possible solutions. The first is that you can read the cookie phet-common-info, which is a JSON Web Token. This can be decoded with vanilla js or this npm library. This cookie contains the user id in a json object. Using this cookie will avoid an http lookup for the user data but I fear that this cookie will be subject to similar timeout/expiration as the web session though.


The other solution is to just make the submission process more robust:

  1. When submit is clicked, fetch the user data from phet-direct
  2. If the user is signed in, submit the request as usual
  3. If the user is not signed in, prompt them to log in, then submit the build after a successful login.

This solution would require either (a) implementing a login dialog in rosetta instead of using the sign-in page or (b) creating a callback page that can handle a submission after a redirect from the sign-in page.

@jbphet
Copy link
Contributor Author

jbphet commented Jun 13, 2023

I have put a workaround in place that stores the user's ID in session storage and pulls it out and uses it if the user tries to publish a translation but the client code gets an indication that the session has expired. This isn't perfect, but I think it will work until we implement #413.

As of this moment, this workaround is deployed on the live translation utility. I'll keep an eye on the logs to make sure we aren't seeing any indications of null user IDs. For reference, here are all of the build requests currently in Rosetta's server log, which starts on May 18. This gives us a sense of how frequently null user IDs were being used, which appears to be around once or twice a day on average.

May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: my-solar-system
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.2.0
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 18 06:43:23 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: gravity-force-lab-basics
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.1.11
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 18 08:14:14 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: greenhouse-effect
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.1.4
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 20 01:04:02 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: number-line-operations
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.0.13
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 22 07:03:32 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: wave-interference
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 2.0.13
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 22 07:53:51 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: gene-expression-essentials
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.0.27
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 23 05:31:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: natural-selection
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.4.12
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet,phet-io
May 23 05:44:31 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: neuron
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.1.27
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 23 05:48:22 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info: build request object:
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     api: 2.0
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     simName: waves-intro
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     version: 1.1.14
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     locales: bg
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     servers: production
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     brands: phet
May 23 06:13:53 phet-server2.int.colorado.edu rosetta[2012222]: info:     translatorId: null
--
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info: build request object:
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     api: 2.0
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     simName: build-a-nucleus
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     version: 1.0.13
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     locales: hu
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     servers: production
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     brands: phet
May 30 08:33:21 phet-server2.int.colorado.edu rosetta[1234981]: info:     translatorId: null
--
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info: build request object:
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     api: 2.0
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     simName: number-compare
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     version: 1.0.1
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     locales: om
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     servers: production
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     brands: phet
May 31 08:15:39 phet-server2.int.colorado.edu rosetta[1234981]: info:     translatorId: null
--
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info: build request object:
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     api: 2.0
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     simName: ratio-and-proportion
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     version: 1.2.6
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     locales: om
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     servers: production
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     brands: phet
Jun 01 07:11:47 phet-server2.int.colorado.edu rosetta[1234981]: info:     translatorId: null
--
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info: build request object:
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     api: 2.0
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     simName: blackbody-spectrum
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     version: 1.0.17
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     locales: ku
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     servers: production
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     brands: phet
Jun 08 01:19:15 phet-server2.int.colorado.edu rosetta[1234981]: info:     translatorId: null
--
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: build-a-nucleus
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.13
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: fi
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 09 12:21:02 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: curve-fitting
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.11
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 09 15:43:35 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: fourier-making-waves
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.15
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 09 16:47:01 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: calculus-grapher
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.2
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: fi
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet,phet-io
Jun 09 21:33:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: equality-explorer
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.1.10
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: fi
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 09 22:36:52 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: graphing-quadratics
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.2.13
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: fi
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet,phet-io
Jun 10 02:27:58 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: molecule-shapes
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.6.3
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet,phet-io
Jun 10 03:16:43 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: number-line-operations
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.13
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 10 04:47:11 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: make-a-ten
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.25
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: fi
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 10 07:07:30 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: ratio-and-proportion
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.2.6
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 10 07:57:12 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: calculus-grapher
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.2
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: cs
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet,phet-io
Jun 10 09:02:21 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: fractions-equality
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.1.12
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: cs
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 10 09:05:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: wave-interference
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 2.0.13
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: iw
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 10 11:38:47 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: density
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.1.0
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: kn
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet,phet-io
Jun 11 05:10:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: quadrilateral
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.1
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: it
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 12 05:50:38 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null
--
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: quadrilateral
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.1
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: it
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null

@jbphet
Copy link
Contributor Author

jbphet commented Jun 14, 2023

Log check: We've had ~15 translation submissions since I put the workaround into place, and there are no instances of build request objects with null values for the translatorId field (which comes from the user ID). So far so good. I'll put a reminder on my calendar to check again in a few days.

@jbphet
Copy link
Contributor Author

jbphet commented Jun 15, 2023

I checked the logs again today and there are no instances of null being used in build requests, so things are still looking good.

For reference, the last instance of a build object with null for the translatorId is copied below. This is useful as a reference when searching for subsequent occurrences of this problem in Rosetta's log:

Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info: build request object:
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     api: 2.0
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     simName: quadrilateral
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     version: 1.0.1
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     locales: it
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     servers: production
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     brands: phet
Jun 12 07:15:17 phet-server2.int.colorado.edu rosetta[1677018]: info:     translatorId: null

@jbphet
Copy link
Contributor Author

jbphet commented Jun 19, 2023

I've written some scripts to help with this. Here is the edited output of one of them that lists all translations with only null user IDs. These should be rebuilt once the user IDs are updated so that the translator is credited on the website.

atomic-interactions/atomic-interactions-strings_sv.json
balancing-chemical-equations/balancing-chemical-equations-strings_ku.json
blackbody-spectrum/blackbody-spectrum-strings_ku.json
build-a-fraction/build-a-fraction-strings_ku.json
build-a-nucleus/build-a-nucleus-strings_fi.json
build-a-nucleus/build-a-nucleus-strings_hu.json
calculus-grapher/calculus-grapher-strings_cs.json
calculus-grapher/calculus-grapher-strings_pl.json
calculus-grapher/calculus-grapher-strings_sv.json
center-and-variability/center-and-variability-strings_az.json
circuit-construction-kit-ac-virtual-lab/circuit-construction-kit-ac-virtual-lab-strings_uk.json
curve-fitting/curve-fitting-strings_hi.json
expression-exchange/expression-exchange-strings_hi.json
fraction-matcher/fraction-matcher-strings_lt.json
fractions-equality/fractions-equality-strings_cs.json
gene-expression-essentials/gene-expression-essentials-strings_bg.json
graphing-quadratics/graphing-quadratics-strings_fi.json
gravity-force-lab-basics/gravity-force-lab-basics-strings_bg.json
greenhouse-effect/greenhouse-effect-strings_bg.json
natural-selection/natural-selection-strings_bg.json
neuron/neuron-strings_bg.json
number-compare/number-compare-strings_sv.json
number-line-operations/number-line-operations-strings_bg.json
number-play/number-play-strings_az.json
rutherford-scattering/rutherford-scattering-strings_lt.json
tangible/tangible-strings_om.json
waves-intro/waves-intro-strings_bg.json

@jbphet
Copy link
Contributor Author

jbphet commented Jun 19, 2023

I discussed how to approach fixing up the translations with @kathy-phet. While it would be possible to comb through the login records from the website data and correlate this with translations submissions, it would be incredibly time consuming. We agreed on this following as a reasonable approach:

  • For all locales where there has only ever been one translator, replace all null user IDs with that user
  • For all locales where there has been more than one translator, for any given translation file that contains at least one valid userId, use the ID of the most recent change in the file to replace all null user IDs in that file
  • For any files that contain all null user IDs and for which multiple translators have worked in that locale, use the ID of the user who made the most recent contribution.

This may not be perfect, but I suspect that it will be pretty close, and far quicker to implement.

jbphet added a commit to phetsims/babel that referenced this issue Jun 19, 2023
jbphet added a commit that referenced this issue Jun 19, 2023
@kathy-phet
Copy link

kathy-phet commented Jun 19, 2023

Hey JB, I thought for the last use case (For any files that contain all null user IDs and for which multiple translators have worked in that locale, use the ID of the user who made the most recent contribution.) You were going to ask @solaolateju .

jbphet added a commit to phetsims/babel that referenced this issue Jun 19, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jun 19, 2023

Hey JB, I thought for the last use case (For any files that contain all null user IDs and for which multiple translators have worked in that locale, use the ID of the user who made the most recent contribution.) You were going to ask @solaolateju .

Thanks for the reminder. I'll do that. Is it also worth checking in with @DianaTavares on some of the es-related locales with multiple translators with recent activity?

@kathy-phet
Copy link

Yes. Thanks.

jbphet added a commit to phetsims/babel that referenced this issue Jun 19, 2023
jbphet added a commit to phetsims/babel that referenced this issue Jun 19, 2023
jbphet added a commit to phetsims/babel that referenced this issue Jun 20, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jun 20, 2023

Once the user IDs are fixed, the following sims will need to be rebuilt to make sure the translation credits are correct on the website.

  • sim: area-builder, locale: ro
  • sim: atomic-interactions, locale: sv
  • sim: balancing-chemical-equations, locale: ku
  • sim: blackbody-spectrum, locale: ku
  • sim: build-a-fraction, locale: ku
  • sim: build-a-nucleus, locale: hu
  • sim: build-a-nucleus, locale: ro
  • sim: build-an-atom, locale: mk
  • sim: calculus-grapher, locale: el
  • sim: calculus-grapher, locale: es
  • sim: calculus-grapher, locale: hy
  • sim: calculus-grapher, locale: pl
  • sim: calculus-grapher, locale: sv
  • sim: center-and-variability, locale: az
  • sim: circuit-construction-kit-ac-virtual-lab, locale: uk
  • sim: circuit-construction-kit-dc, locale: ca
  • sim: collision-lab, locale: ha
  • sim: coulombs-law, locale: bg
  • sim: coulombs-law, locale: ha
  • sim: curve-fitting, locale: hi
  • sim: energy-forms-and-changes, locale: ha
  • sim: energy-skate-park, locale: ca
  • sim: energy-skate-park, locale: ha
  • sim: expression-exchange, locale: hi
  • sim: faradays-law, locale: fi
  • sim: faradays-law, locale: ha
  • sim: faradays-law, locale: vi
  • sim: forces-and-motion-basics, locale: vi
  • sim: fourier-making-waves, locale: fr
  • sim: fraction-matcher, locale: lt
  • sim: friction, locale: ro
  • sim: gene-expression-essentials, locale: bg
  • sim: graphing-lines, locale: az
  • sim: graphing-quadratics, locale: az
  • sim: graphing-slope-intercept, locale: az
  • sim: gravity-force-lab-basics, locale: bg
  • sim: gravity-force-lab, locale: bg
  • sim: greenhouse-effect, locale: bg
  • sim: john-travoltage, locale: es
  • sim: john-travoltage, locale: vi
  • sim: mean-share-and-balance, locale: az
  • sim: molarity, locale: de
  • sim: molecules-and-light, locale: es
  • sim: my-solar-system, locale: bg
  • sim: my-solar-system, locale: fr
  • sim: my-solar-system, locale: sr
  • sim: natural-selection, locale: bg
  • sim: neuron, locale: bg
  • sim: number-compare, locale: sv
  • sim: number-line-distance, locale: es
  • sim: number-line-operations, locale: az
  • sim: number-line-operations, locale: bg
  • sim: number-play, locale: az
  • sim: number-play, locale: pl
  • sim: number-play, locale: ro
  • sim: ph-scale, locale: ro
  • sim: ratio-and-proportion, locale: om
  • sim: rutherford-scattering, locale: lt
  • sim: states-of-matter, locale: it
  • sim: states-of-matter, locale: sv
  • sim: vector-addition, locale: az
  • sim: wave-interference, locale: bg
  • sim: waves-intro, locale: bg

@jbphet
Copy link
Contributor Author

jbphet commented Jun 21, 2023

I've updated all cases of null user IDs for locales where there was only ever a single translator. This addressed 15 translation files, and I rebuilt 11 sims as a result (some of the files were for common code, which don't require a rebuild).

Here are the files:

balancing-chemical-equations/balancing-chemical-equations-strings_ku.json
blackbody-spectrum/blackbody-spectrum-strings_ku.json
build-a-fraction/build-a-fraction-strings_ku.json
fractions-common/fractions-common-strings_ku.json
joist/joist-strings_ku.json
vegas/vegas-strings_ku.json
build-a-nucleus/build-a-nucleus-strings_hu.json
build-an-atom/build-an-atom-strings_mk.json
calculus-grapher/calculus-grapher-strings_pl.json
number-play/number-play-strings_pl.json
faradays-law/faradays-law-strings_vi.json
forces-and-motion-basics/forces-and-motion-basics-strings_vi.json
john-travoltage/john-travoltage-strings_vi.json
joist/joist-strings_vi.json
my-solar-system/my-solar-system-strings_sr.json

@jbphet
Copy link
Contributor Author

jbphet commented Jun 22, 2023

I've created and run a script to do the second step of the plan described in #412 (comment) and committed the changes. Below is the output of that script, which summarizes which user IDs were found in each file and what the null values were replaced with.

Translation file name = area-builder-strings_ro.json

  userId = null
  most recent contribution time = Fri Apr 14 2023 14:09:59 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Fri Apr 14 2023 11:19:18 GMT-0600 (Mountain Daylight Time)

  userId = 954258
  most recent contribution time = Wed Jun 23 2021 12:08:49 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 183155

Translation file name = build-a-nucleus-strings_ro.json

  userId = null
  most recent contribution time = Fri Apr 14 2023 10:54:56 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Sun Sep 11 2022 12:00:44 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 183155

Translation file name = calculus-grapher-strings_el.json

  userId = null
  most recent contribution time = Wed Apr 26 2023 13:05:58 GMT-0600 (Mountain Daylight Time)

  userId = 146870
  most recent contribution time = Wed Apr 26 2023 12:57:54 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 146870

Translation file name = calculus-grapher-strings_es.json

  userId = 964963
  most recent contribution time = Tue Apr 18 2023 11:04:39 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Tue Apr 18 2023 10:54:48 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 964963

Translation file name = calculus-grapher-strings_fi.json

  userId = 1135480
  most recent contribution time = Wed Jun 14 2023 22:16:59 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Jun 09 2023 21:33:27 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1135480

Translation file name = calculus-grapher-strings_hy.json

  userId = 203054
  most recent contribution time = Thu May 04 2023 11:22:55 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu Apr 20 2023 08:38:11 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 203054

Translation file name = circuit-construction-kit-common-strings_ca.json

  userId = null
  most recent contribution time = Mon May 15 2023 23:37:08 GMT-0600 (Mountain Daylight Time)

  userId = 1094568
  most recent contribution time = Mon Nov 28 2022 09:10:19 GMT-0700 (Mountain Standard Time)

  userId = 763752
  most recent contribution time = Thu Apr 09 2020 02:51:00 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1094568

Translation file name = circuit-construction-kit-common-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:13:13 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Tue Mar 28 2023 04:43:52 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 945049

Translation file name = circuit-construction-kit-common-strings_uk.json

  userId = null
  most recent contribution time = Mon Apr 17 2023 05:39:29 GMT-0600 (Mountain Daylight Time)

  userId = 166868
  most recent contribution time = Mon Apr 17 2023 03:07:06 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 166868

Translation file name = circuit-construction-kit-dc-strings_ca.json

  userId = null
  most recent contribution time = Mon May 15 2023 23:37:08 GMT-0600 (Mountain Daylight Time)

  userId = 763752
  most recent contribution time = Tue Apr 14 2020 02:01:11 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 763752

Translation file name = collision-lab-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:14:28 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Thu Nov 10 2022 06:48:25 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 945049

Translation file name = coulombs-law-strings_bg.json

  userId = 1145192
  most recent contribution time = Wed May 03 2023 13:15:07 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Tue May 02 2023 07:19:10 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = coulombs-law-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:15:50 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Tue Oct 11 2022 10:20:39 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 945049

Translation file name = curve-fitting-strings_iw.json

  userId = null
  most recent contribution time = Fri Jun 09 2023 15:43:30 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Dec 05 2020 15:19:13 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 282815

Translation file name = density-strings_kn.json

  userId = null
  most recent contribution time = Sun Jun 11 2023 05:10:31 GMT-0600 (Mountain Daylight Time)

  userId = 1085522
  most recent contribution time = Fri Jun 09 2023 11:53:41 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1085522

Translation file name = density-buoyancy-common-strings_fr.json

  userId = 871615
  most recent contribution time = Thu Jun 08 2023 12:48:51 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:07:03 GMT-0600 (Mountain Daylight Time)

  userId = 237975
  most recent contribution time = Tue Jan 25 2022 11:32:38 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 871615

Translation file name = energy-forms-and-changes-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:19:41 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Thu Nov 10 2022 07:00:04 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 945049

Translation file name = energy-skate-park-strings_ca.json

  userId = null
  most recent contribution time = Fri Apr 21 2023 07:41:42 GMT-0600 (Mountain Daylight Time)

  userId = 1094568
  most recent contribution time = Mon Nov 28 2022 09:12:14 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1094568

Translation file name = energy-skate-park-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:31:45 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Wed Oct 12 2022 09:36:25 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 945049

Translation file name = equality-explorer-strings_fi.json

  userId = 1135480
  most recent contribution time = Sat Jun 10 2023 01:58:51 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Jun 09 2023 22:36:48 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1135480

Translation file name = faradays-law-strings_fi.json

  userId = null
  most recent contribution time = Mon Mar 27 2023 05:10:41 GMT-0600 (Mountain Daylight Time)

  userId = 158684
  most recent contribution time = Fri Jan 29 2016 09:48:20 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 158684

Translation file name = faradays-law-strings_ha.json

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:33:55 GMT-0600 (Mountain Daylight Time)

  userId = 945049
  most recent contribution time = Tue Oct 11 2022 10:03:31 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 945049

Translation file name = fourier-making-waves-strings_fr.json

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:12:50 GMT-0600 (Mountain Daylight Time)

  userId = 237975
  most recent contribution time = Fri Dec 10 2021 09:27:27 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 237975

Translation file name = fourier-making-waves-strings_iw.json

  userId = null
  most recent contribution time = Fri Jun 09 2023 16:46:56 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Nov 20 2021 14:27:45 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 282815

Translation file name = fractions-common-strings_az.json

  userId = null
  most recent contribution time = Sun Apr 16 2023 11:39:26 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Fri Jan 20 2023 03:11:43 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1127852

Translation file name = fractions-common-strings_cs.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 09:05:41 GMT-0600 (Mountain Daylight Time)

  userId = 315698
  most recent contribution time = Tue Aug 10 2021 12:12:10 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 315698

Translation file name = fractions-common-strings_lt.json

  userId = null
  most recent contribution time = Mon Mar 13 2023 05:18:55 GMT-0600 (Mountain Daylight Time)

  userId = 859922
  most recent contribution time = Thu Feb 04 2021 04:49:01 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 859922

Translation file name = friction-strings_ro.json

  userId = null
  most recent contribution time = Fri Apr 14 2023 13:58:16 GMT-0600 (Mountain Daylight Time)

  userId = 955557
  most recent contribution time = Sat Apr 09 2022 08:39:06 GMT-0600 (Mountain Daylight Time)

  userId = 161937
  most recent contribution time = Thu Dec 10 2015 00:32:37 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 955557

Translation file name = graphing-lines-strings_az.json

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:06:21 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Fri Jan 20 2023 06:23:51 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1127852

Translation file name = graphing-quadratics-strings_az.json

  userId = null
  most recent contribution time = Wed Apr 19 2023 05:53:12 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Fri Jan 20 2023 06:23:51 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1127852

Translation file name = graphing-slope-intercept-strings_az.json

  userId = null
  most recent contribution time = Thu Apr 20 2023 01:30:20 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Fri Jan 20 2023 04:03:55 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1127852

Translation file name = gravity-force-lab-strings_bg.json

  userId = 1145192
  most recent contribution time = Thu May 18 2023 08:26:04 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 08:13:50 GMT-0600 (Mountain Daylight Time)

  userId = 374709
  most recent contribution time = Mon Mar 20 2017 02:33:12 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = inverse-square-law-common-strings_bg.json

  userId = 1145192
  most recent contribution time = Thu May 18 2023 08:26:04 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 08:13:50 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = john-travoltage-strings_es.json

  userId = null
  most recent contribution time = Sun Apr 30 2023 20:36:37 GMT-0600 (Mountain Daylight Time)

  userId = 282036
  most recent contribution time = Wed Jan 02 2019 13:35:42 GMT-0700 (Mountain Standard Time)

  userId = 170730
  most recent contribution time = Mon Apr 18 2016 06:14:36 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282036

Translation file name = joist-strings_az.json

  userId = null
  most recent contribution time = Sun Apr 16 2023 15:34:21 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Sun Apr 16 2023 15:10:02 GMT-0600 (Mountain Daylight Time)

  userId = 1120507
  most recent contribution time = Sat Apr 08 2023 08:16:16 GMT-0600 (Mountain Daylight Time)

  userId = 591975
  most recent contribution time = Mon Apr 03 2023 15:14:14 GMT-0600 (Mountain Daylight Time)

  userId = 641432
  most recent contribution time = Tue Aug 09 2022 05:39:40 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1127852

Translation file name = joist-strings_bg.json

  userId = 1145192
  most recent contribution time = Tue May 23 2023 06:24:19 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 08:13:50 GMT-0600 (Mountain Daylight Time)

  userId = 1070013
  most recent contribution time = Wed Jul 06 2022 00:27:05 GMT-0600 (Mountain Daylight Time)

  userId = 842492
  most recent contribution time = Wed Oct 28 2020 14:38:01 GMT-0600 (Mountain Daylight Time)

  userId = 374709
  most recent contribution time = Tue Oct 31 2017 02:14:33 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = joist-strings_fr.json

  userId = 244628
  most recent contribution time = Thu Apr 20 2023 07:44:09 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:04:19 GMT-0600 (Mountain Daylight Time)

  userId = 1086112
  most recent contribution time = Tue Oct 04 2022 10:39:25 GMT-0600 (Mountain Daylight Time)

  userId = 1085475
  most recent contribution time = Fri Sep 30 2022 07:54:36 GMT-0600 (Mountain Daylight Time)

  userId = 871615
  most recent contribution time = Thu Sep 29 2022 00:01:16 GMT-0600 (Mountain Daylight Time)

  userId = 663149
  most recent contribution time = Fri Sep 23 2022 22:40:22 GMT-0600 (Mountain Daylight Time)

  userId = 237975
  most recent contribution time = Fri Sep 09 2022 14:29:14 GMT-0600 (Mountain Daylight Time)

  userId = 147846
  most recent contribution time = Fri Jan 28 2022 07:00:49 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 244628

Translation file name = joist-strings_hy.json

  userId = 203054
  most recent contribution time = Wed Apr 26 2023 01:51:03 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu Apr 20 2023 08:38:11 GMT-0600 (Mountain Daylight Time)

  userId = 164237
  most recent contribution time = Mon Oct 17 2022 03:13:28 GMT-0600 (Mountain Daylight Time)

  userId = 170274
  most recent contribution time = Fri Jan 28 2022 08:16:55 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 203054

Translation file name = joist-strings_it.json

  userId = 1008323
  most recent contribution time = Mon Jun 12 2023 14:18:41 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Mon Jun 12 2023 07:15:01 GMT-0600 (Mountain Daylight Time)

  userId = 157247
  most recent contribution time = Sat Mar 25 2023 23:57:01 GMT-0600 (Mountain Daylight Time)

  userId = 526485
  most recent contribution time = Fri Sep 30 2022 10:58:27 GMT-0600 (Mountain Daylight Time)

  userId = 332542
  most recent contribution time = Fri Sep 23 2022 08:25:39 GMT-0600 (Mountain Daylight Time)

  userId = 1029687
  most recent contribution time = Tue Mar 01 2022 04:18:11 GMT-0700 (Mountain Standard Time)

  userId = phet-test
  most recent contribution time = Thu Sep 17 2015 21:49:24 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1008323

Translation file name = joist-strings_ro.json

  userId = 954258
  most recent contribution time = Mon Jun 12 2023 14:25:00 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Sun Apr 23 2023 00:12:53 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Apr 14 2023 14:03:33 GMT-0600 (Mountain Daylight Time)

  userId = 782907
  most recent contribution time = Sun Oct 16 2022 08:11:31 GMT-0600 (Mountain Daylight Time)

  userId = 955557
  most recent contribution time = Sat Sep 24 2022 05:36:22 GMT-0600 (Mountain Daylight Time)

  userId = 726466
  most recent contribution time = Fri Sep 10 2021 06:20:33 GMT-0600 (Mountain Daylight Time)

  userId = 161937
  most recent contribution time = Thu Sep 22 2016 02:08:36 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 954258

Translation file name = joist-strings_sv.json

  userId = null
  most recent contribution time = Wed May 10 2023 16:19:00 GMT-0600 (Mountain Daylight Time)

  userId = 155212
  most recent contribution time = Wed May 10 2023 15:21:10 GMT-0600 (Mountain Daylight Time)

  userId = 726743
  most recent contribution time = Tue Oct 18 2022 09:32:32 GMT-0600 (Mountain Daylight Time)

  userId = 641333
  most recent contribution time = Wed Oct 05 2022 04:55:38 GMT-0600 (Mountain Daylight Time)

  userId = 822442
  most recent contribution time = Wed Aug 25 2021 01:25:56 GMT-0600 (Mountain Daylight Time)

  userId = 202544
  most recent contribution time = Sun Apr 08 2018 04:40:41 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 155212

Translation file name = make-a-ten-strings_fi.json

  userId = 1135480
  most recent contribution time = Sat Jun 10 2023 07:09:46 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Sat Jun 10 2023 07:07:26 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1135480

Translation file name = mean-share-and-balance-strings_az.json

  userId = 1127852
  most recent contribution time = Sun Apr 16 2023 15:07:45 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Sun Apr 16 2023 13:57:32 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1127852

Translation file name = molarity-strings_de.json

  userId = null
  most recent contribution time = Mon May 15 2023 23:49:57 GMT-0600 (Mountain Daylight Time)

  userId = 920037
  most recent contribution time = Mon May 15 2023 22:19:26 GMT-0600 (Mountain Daylight Time)

  userId = 272196
  most recent contribution time = Mon Apr 02 2018 04:14:52 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 920037

Translation file name = molecule-shapes-strings_iw.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 03:16:34 GMT-0600 (Mountain Daylight Time)

  userId = 322219
  most recent contribution time = Thu Jun 09 2016 01:25:33 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 322219

Translation file name = molecules-and-light-strings_es.json

  userId = null
  most recent contribution time = Mon May 01 2023 14:38:04 GMT-0600 (Mountain Daylight Time)

  userId = 282036
  most recent contribution time = Mon Jan 02 2017 21:31:34 GMT-0700 (Mountain Standard Time)

  userId = 174240
  most recent contribution time = Sun Oct 09 2016 13:13:01 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282036

Translation file name = my-solar-system-strings_bg.json

  userId = 1145192
  most recent contribution time = Thu May 18 2023 07:04:12 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 06:43:09 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = my-solar-system-strings_fr.json

  userId = 871615
  most recent contribution time = Tue May 16 2023 13:24:16 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:15:26 GMT-0600 (Mountain Daylight Time)

  userId = 637925
  most recent contribution time = Mon Dec 05 2022 18:43:55 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 871615

Translation file name = number-line-distance-strings_es.json

  userId = null
  most recent contribution time = Sun Apr 30 2023 21:41:43 GMT-0600 (Mountain Daylight Time)

  userId = 282036
  most recent contribution time = Fri Aug 13 2021 13:35:16 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282036

Translation file name = number-line-operations-strings_az.json

  userId = null
  most recent contribution time = Sun Apr 16 2023 12:29:50 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Fri Jan 20 2023 06:10:18 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1127852

Translation file name = number-line-operations-strings_iw.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 04:47:04 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Jul 31 2021 16:11:03 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282815

Translation file name = number-play-strings_ro.json

  userId = null
  most recent contribution time = Fri Apr 14 2023 13:03:05 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Wed Dec 28 2022 00:51:53 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 183155

Translation file name = number-suite-common-strings_fr.json

  userId = 147846
  most recent contribution time = Tue May 02 2023 06:02:56 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:04:19 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 147846

Translation file name = number-suite-common-strings_ro.json

  userId = null
  most recent contribution time = Fri Apr 14 2023 13:03:05 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Wed Dec 28 2022 00:51:53 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 183155

Translation file name = ph-scale-strings_ro.json

  userId = 183155
  most recent contribution time = Sun Apr 23 2023 00:19:10 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Apr 14 2023 14:06:33 GMT-0600 (Mountain Daylight Time)

  userId = 955557
  most recent contribution time = Sun Nov 28 2021 12:12:34 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 183155

Translation file name = quadrilateral-strings_it.json

  userId = 1008323
  most recent contribution time = Mon Jun 12 2023 14:18:41 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Mon Jun 12 2023 07:15:01 GMT-0600 (Mountain Daylight Time)

  userId = 157247
  most recent contribution time = Mon Jun 12 2023 05:54:57 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1008323

Translation file name = ratio-and-proportion-strings_iw.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 07:57:05 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Oct 09 2021 08:44:34 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282815

Translation file name = ratio-and-proportion-strings_om.json

  userId = null
  most recent contribution time = Thu Jun 01 2023 07:11:35 GMT-0600 (Mountain Daylight Time)

  userId = 164117
  most recent contribution time = Tue Sep 13 2022 08:07:25 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 164117

Translation file name = scenery-phet-strings_az.json

  userId = null
  most recent contribution time = Sun Apr 16 2023 11:10:46 GMT-0600 (Mountain Daylight Time)

  userId = 1142444
  most recent contribution time = Mon Apr 10 2023 04:23:42 GMT-0600 (Mountain Daylight Time)

  userId = 1120507
  most recent contribution time = Sat Apr 08 2023 01:31:25 GMT-0600 (Mountain Daylight Time)

  userId = 591975
  most recent contribution time = Mon Apr 03 2023 15:14:14 GMT-0600 (Mountain Daylight Time)

  userId = 1127852
  most recent contribution time = Sat Feb 11 2023 07:32:32 GMT-0700 (Mountain Standard Time)

  userId = 641432
  most recent contribution time = Tue Aug 09 2022 05:39:40 GMT-0600 (Mountain Daylight Time)

  userId = 661982
  most recent contribution time = Wed Apr 06 2022 02:38:52 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1142444

Translation file name = scenery-phet-strings_bg.json

  userId = 1145192
  most recent contribution time = Tue May 23 2023 01:10:05 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 06:43:09 GMT-0600 (Mountain Daylight Time)

  userId = 1070013
  most recent contribution time = Wed Jul 06 2022 00:16:58 GMT-0600 (Mountain Daylight Time)

  userId = 842492
  most recent contribution time = Wed Oct 28 2020 14:38:01 GMT-0600 (Mountain Daylight Time)

  userId = 374709
  most recent contribution time = Tue Feb 28 2017 02:40:00 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1145192

Translation file name = scenery-phet-strings_de.json

  userId = null
  most recent contribution time = Mon May 15 2023 23:49:57 GMT-0600 (Mountain Daylight Time)

  userId = 920037
  most recent contribution time = Mon May 15 2023 22:15:39 GMT-0600 (Mountain Daylight Time)

  userId = 532304
  most recent contribution time = Mon Oct 24 2022 07:19:31 GMT-0600 (Mountain Daylight Time)

  userId = 1092172
  most recent contribution time = Thu Sep 22 2022 17:07:33 GMT-0600 (Mountain Daylight Time)

  userId = 446279
  most recent contribution time = Tue Mar 02 2021 12:17:39 GMT-0700 (Mountain Standard Time)

  userId = 272196
  most recent contribution time = Sun Feb 14 2021 09:45:31 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 920037

Translation file name = scenery-phet-strings_es.json

  userId = 964963
  most recent contribution time = Wed May 17 2023 00:36:02 GMT-0600 (Mountain Daylight Time)

  userId = 282036
  most recent contribution time = Tue Apr 25 2023 13:54:48 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Tue Apr 18 2023 10:54:48 GMT-0600 (Mountain Daylight Time)

  userId = 802667
  most recent contribution time = Wed Feb 01 2023 19:30:04 GMT-0700 (Mountain Standard Time)

  userId = 155750
  most recent contribution time = Fri Mar 06 2020 15:44:41 GMT-0700 (Mountain Standard Time)

  userId = 685589
  most recent contribution time = Tue Dec 10 2019 14:39:13 GMT-0700 (Mountain Standard Time)

  userId = 695095
  most recent contribution time = Tue Sep 10 2019 10:38:40 GMT-0600 (Mountain Daylight Time)

  userId = 174240
  most recent contribution time = Tue Aug 23 2016 21:19:03 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 964963

Translation file name = scenery-phet-strings_fr.json

  userId = 871615
  most recent contribution time = Tue May 16 2023 13:24:16 GMT-0600 (Mountain Daylight Time)

  userId = 147846
  most recent contribution time = Tue May 02 2023 06:05:26 GMT-0600 (Mountain Daylight Time)

  userId = 244628
  most recent contribution time = Thu Apr 20 2023 08:00:39 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:04:19 GMT-0600 (Mountain Daylight Time)

  userId = 1085475
  most recent contribution time = Sat Oct 01 2022 10:10:56 GMT-0600 (Mountain Daylight Time)

  userId = 1086112
  most recent contribution time = Thu Sep 29 2022 04:06:45 GMT-0600 (Mountain Daylight Time)

  userId = 663149
  most recent contribution time = Fri Sep 23 2022 22:40:22 GMT-0600 (Mountain Daylight Time)

  userId = 237975
  most recent contribution time = Wed Dec 08 2021 19:50:03 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 871615

Translation file name = scenery-phet-strings_ha.json

  userId = 945049
  most recent contribution time = Mon Jun 12 2023 10:53:33 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Mon Apr 03 2023 07:19:41 GMT-0600 (Mountain Daylight Time)

  userId = 882134
  most recent contribution time = Mon Oct 31 2022 14:06:37 GMT-0600 (Mountain Daylight Time)

  userId = 1049403
  most recent contribution time = Sat Aug 20 2022 11:24:11 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 945049

Translation file name = scenery-phet-strings_hy.json

  userId = 203054
  most recent contribution time = Wed Apr 26 2023 01:51:03 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu Apr 20 2023 08:38:11 GMT-0600 (Mountain Daylight Time)

  userId = 164237
  most recent contribution time = Mon Oct 17 2022 03:13:28 GMT-0600 (Mountain Daylight Time)

  userId = 170274
  most recent contribution time = Sat Jan 29 2022 12:01:53 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 203054

Translation file name = scenery-phet-strings_it.json

  userId = 1008323
  most recent contribution time = Mon Jun 12 2023 14:18:41 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Mon Jun 12 2023 07:15:01 GMT-0600 (Mountain Daylight Time)

  userId = 157247
  most recent contribution time = Sat May 13 2023 10:38:57 GMT-0600 (Mountain Daylight Time)

  userId = 332542
  most recent contribution time = Tue Nov 15 2022 08:01:07 GMT-0700 (Mountain Standard Time)

  userId = 526485
  most recent contribution time = Fri Sep 30 2022 10:58:27 GMT-0600 (Mountain Daylight Time)

  userId = 1029687
  most recent contribution time = Wed Mar 02 2022 04:12:19 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 1008323

Translation file name = scenery-phet-strings_iw.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 03:16:34 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Jun 10 2023 01:37:43 GMT-0600 (Mountain Daylight Time)

  userId = 775981
  most recent contribution time = Tue May 16 2023 03:07:26 GMT-0600 (Mountain Daylight Time)

  userId = 322219
  most recent contribution time = Wed Jun 08 2016 03:08:36 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282815

Translation file name = scenery-phet-strings_ro.json

  userId = 954258
  most recent contribution time = Mon Jun 12 2023 14:25:00 GMT-0600 (Mountain Daylight Time)

  userId = 183155
  most recent contribution time = Fri Apr 21 2023 11:44:58 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Apr 14 2023 14:03:33 GMT-0600 (Mountain Daylight Time)

  userId = 782907
  most recent contribution time = Sun Oct 16 2022 10:18:55 GMT-0600 (Mountain Daylight Time)

  userId = 955557
  most recent contribution time = Sat Apr 09 2022 10:50:00 GMT-0600 (Mountain Daylight Time)

  userId = 726466
  most recent contribution time = Fri Sep 10 2021 06:18:16 GMT-0600 (Mountain Daylight Time)

  userId = 161937
  most recent contribution time = Thu Sep 22 2016 02:08:36 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 954258

Translation file name = scenery-phet-strings_sv.json

  userId = 155212
  most recent contribution time = Thu May 11 2023 08:38:10 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed May 10 2023 16:19:00 GMT-0600 (Mountain Daylight Time)

  userId = 726743
  most recent contribution time = Tue Oct 18 2022 09:32:32 GMT-0600 (Mountain Daylight Time)

  userId = 641333
  most recent contribution time = Wed Oct 05 2022 04:55:38 GMT-0600 (Mountain Daylight Time)

  userId = 202544
  most recent contribution time = Tue Feb 02 2021 03:46:23 GMT-0700 (Mountain Standard Time)

  userId = 822442
  most recent contribution time = Mon Aug 31 2020 04:09:03 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 155212

Translation file name = shred-strings_fi.json

  userId = null
  most recent contribution time = Fri Jun 09 2023 12:20:55 GMT-0600 (Mountain Daylight Time)

  userId = 158684
  most recent contribution time = Thu Sep 22 2016 15:01:07 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 158684

Translation file name = shred-strings_ro.json

  userId = 183155
  most recent contribution time = Fri Apr 14 2023 11:36:25 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Fri Apr 14 2023 10:54:56 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 183155

Translation file name = solar-system-common-strings_bg.json

  userId = 1145192
  most recent contribution time = Thu May 18 2023 07:04:12 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Thu May 18 2023 06:43:09 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = solar-system-common-strings_fr.json

  userId = 871615
  most recent contribution time = Tue May 16 2023 13:24:16 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Wed Apr 19 2023 23:15:26 GMT-0600 (Mountain Daylight Time)

  userId = 637925
  most recent contribution time = Mon Dec 05 2022 18:43:55 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 871615

Translation file name = states-of-matter-strings_it.json

  userId = null
  most recent contribution time = Sat May 13 2023 10:42:14 GMT-0600 (Mountain Daylight Time)

  userId = 157247
  most recent contribution time = Sat Mar 25 2023 12:45:54 GMT-0600 (Mountain Daylight Time)

  userId = 332542
  most recent contribution time = Fri Sep 23 2022 08:17:28 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 157247

Translation file name = states-of-matter-strings_sv.json

  userId = null
  most recent contribution time = Thu May 11 2023 07:29:01 GMT-0600 (Mountain Daylight Time)

  userId = 202544
  most recent contribution time = Sun Apr 08 2018 04:40:41 GMT-0600 (Mountain Daylight Time)

  userId = 155212
  most recent contribution time = Mon Feb 26 2018 15:50:07 GMT-0700 (Mountain Standard Time)

  Replacing null user IDs with 202544

Translation file name = vector-addition-strings_az.json

  userId = null
  most recent contribution time = Mon Apr 17 2023 05:31:19 GMT-0600 (Mountain Daylight Time)

  userId = 661982
  most recent contribution time = Sat Mar 28 2020 08:01:02 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 661982

Translation file name = vegas-strings_fi.json

  userId = null
  most recent contribution time = Fri Jun 09 2023 22:36:48 GMT-0600 (Mountain Daylight Time)

  userId = 1135480
  most recent contribution time = Fri Jun 09 2023 11:46:04 GMT-0600 (Mountain Daylight Time)

  userId = 158684
  most recent contribution time = Sun Jun 03 2018 11:22:15 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1135480

Translation file name = wave-interference-strings_bg.json

  userId = 1145192
  most recent contribution time = Tue May 23 2023 06:15:45 GMT-0600 (Mountain Daylight Time)

  userId = null
  most recent contribution time = Tue May 23 2023 06:13:46 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 1145192

Translation file name = wave-interference-strings_iw.json

  userId = null
  most recent contribution time = Sat Jun 10 2023 11:38:41 GMT-0600 (Mountain Daylight Time)

  userId = 282815
  most recent contribution time = Sat Jun 10 2023 11:14:47 GMT-0600 (Mountain Daylight Time)

  Replacing null user IDs with 282815

jbphet added a commit to phetsims/babel that referenced this issue Jun 22, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jun 22, 2023

In the above commit I set the remaining null userId values in all bg files to the only user ID I have seen with recent activity in Rosetta's logs.

jbphet added a commit to phetsims/babel that referenced this issue Jun 22, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jun 22, 2023

In the above commit I set the remaining null userId values in all fi files to the only user ID I have seen with recent activity in Rosetta's logs.

jbphet added a commit to phetsims/babel that referenced this issue Jul 10, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jul 10, 2023

I used git logs to look for successful commits of translations for the sv locale and found that most if not all activity in the time frame where the problems were occurring were done by one translator, so I've changed all null user IDs in the sv files to this ID.

jbphet added a commit to phetsims/babel that referenced this issue Jul 10, 2023
@jbphet
Copy link
Contributor Author

jbphet commented Jul 10, 2023

I used the same technique of looking at git logs to figure out which translator was working on the cs locale translations during the time frame in question and replaced the null user IDs with that translator's ID (there was only one).

@jbphet
Copy link
Contributor Author

jbphet commented Jul 11, 2023

For the last remaining instances of null user IDs, I asked @solaolateju if he knew who had done the translations, and he was able to provide me with some helpful information. I'm not going to post it in this GitHub issue for security reasons, so I'll keep an archive of it in my email. I've made the requisite changes, and will now kick off a bulk rebuild of all the affected translations.

@jbphet
Copy link
Contributor Author

jbphet commented Jul 11, 2023

The translations have all been rebuilt, and there are no more null user IDs in babel. I think it's safe to finally close this.

@jbphet jbphet closed this as completed Jul 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants