Repository navigation
feat(glossaries,tm): update glossaries and translation memory API to the latest docs - #421
Merged
Merged
Conversation
…the latest docs Glossaries: - concordance search: add the required `expressions`, deprecate `expression` - add DRAFT term status, Enterprise `fields` on terms and concepts, `isShared` on glossaries - add updateConcept overload with a dedicated UpdateConceptRequest and deprecate the overload that sends the Concept response model - export: send the documented upper-case filter values (statuses/types/genders/partsOfSpeech via new term* fields; the deprecated setters convert term enums), add text, caseSensitive, searchStrict, searchFullMatch, dateFrom and dateTo filters - add the missing export status attributes and the `filter` query param for listGlossaries - deprecate ListTermsParams.translationOfTermId Translation memory: - concordance search: add the required `expressions`, deprecate `expression` - add languageId, isShared and webUrl to TranslationMemory and isShared to AddTranslationMemoryRequest - add listTms(ListTmsParams) with filter and Long userId, and listTmSegments(tmId, ListTmSegmentsParams) with croql Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Add a dedicated test that the deprecated ExportGlossaryRequest.setPartsOfSpeech sends PartOfSpeech.OTHER as "X" and maps it back, and document that the mapping follows the published API values (term `other`, export `X`) and Universal Dependencies semantics but is not confirmed by a live Crowdin API test. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tWithRequest The new updateConcept(Long, Long, UpdateConceptRequest) overload made existing calls such as updateConcept(id, id, null) ambiguous at compile time. It is now named updateConceptWithRequest; the original updateConcept(Long, Long, Concept) keeps its signature, deprecation and runtime behaviour. Add a compatibility test that calls updateConcept(id, id, null). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
andrii-bodnar
approved these changes
Oct 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of updating the SDK to the current Crowdin API docs. This PR covers the Glossaries and Translation Memory APIs.
Glossaries
SearchConcordanceRequestgetsexpressions, which the API now requires.expressionis deprecated.Status.DRAFTadded.fieldsadded toTerm,AddTermRequestandConcept.isSharedadded toGlossaryandAddGlossaryRequest.updateConceptWithRequest(glossaryId, conceptId, UpdateConceptRequest)sends only the fields thePUTendpoint accepts. It has a separate name, not an overload, so existing calls stay unambiguous.updateConcept(glossaryId, conceptId, Concept), which sends theConceptresponse model, is deprecated. Its signature and behaviour are unchanged.NOT_RECOMMENDED,FULL_FORM, …), and UD tags for parts of speech (NOUN,ADJ,X, …).termStatuses,termTypes,termGenders,termPartsOfSpeech.text,caseSensitive,searchStrict,searchFullMatch,dateFrom,dateTo.text,caseSensitive,searchFullMatch,searchStrict,status,partOfSpeech,type,gender,authorId,dateFrom,dateTo).listGlossaries: newfilterquery parameter.ListTermsParams.translationOfTermId, which the API deprecates.Translation Memory
expressionsadded,expressiondeprecated.languageId,isSharedandwebUrladded toTranslationMemory;isSharedadded toAddTranslationMemoryRequest.listTms(ListTmsParams)addsfilterand takes aLonguserId. The existing method takesInteger, so the change is an overload.listTmSegments(tmId, ListTmSegmentsParams)adds thecroqlfilter.POST/PATCH/DELETE …/segments/{segmentId}/records), because the API deprecates them in favour of Edit TM Segment.Backward compatibility
No public method, field or class was removed, renamed or retyped.
"preferred","full form","noun"), which the export endpoint doesn't document.setStatuses/setTypes/setGenders/setPartsOfSpeechnow convert term enums to the documented values.othermaps toX. The published API usesotherfor glossary terms andXfor glossary export, and Universal Dependencies definesXas "other". This hasn't been confirmed by a live Crowdin API test. A dedicated unit test (exportGlossaryRequestDeprecatedSetterMapsOtherPartOfSpeechToXTest) checks thatPartOfSpeech.OTHERis sent as"X"and maps back.SYMandCOMMON, so they leave them out.updateConcept(id, id, null)still compiles, because the new method has a different name. A compatibility test (updateConceptWithNullRequestCompatibilityTest) covers it.equals/hashCode/toStringinclude the new fields.Testing
./gradlew build: 647 tests, 0 failures, on both JDK 17 and JDK 8../gradlew javadocon JDK 8: no errors.expressions(both APIs);updateConceptWithRequestwith the new request, andupdateConcept(id, id, null)compiling and calling the original endpoint;fields,DRAFT,isShared,webUrl,languageId;listTms(ListTmsParams)andlistTmSegmentswithcroql.🤖 Generated with Claude Code