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

Enable filtering of non-enabled i18n language files from being loaded… #160

Merged
merged 1 commit into from
May 1, 2020

Conversation

awoods
Copy link
Member

@awoods awoods commented Apr 22, 2020

… into triple store

Define name of available language listing file (found in Vitro-languages)
Update RDFFilesLoader method interfaces to include ServletContext

Part of resolution to: https://jira.lyrasis.org/browse/VIVO-1836

What does this pull request do?

This pull-request, in combination with the three other pull-requests noted below, does the following:

  • Enable language Maven dependencies by default (they should not have to be turned off)
  • Add logic that filters out language triples files from being loaded into the Vitro triple store
    • The logic is based on comparing the list of all available i18n languages with the languages that are enabled in the runtime.properties
    • If no languages are enabled (default case), then all languages except 'en_US' are omitted
    • The core of the pull-request is found in RDFFilesLoader.java

Related pull-requests

How should this be tested?

To test the set of pull-requests,

  1. Default case
    • build all four pull-requests
    • install VIVO like normal
    • observe that only U.S. English is enabled
  2. Multi-language case
    • install VIVO with an updated runtime.properties that includes multiple languages
    • observe that VIVO has those language options in the i18n dropdown
  3. Both cases above
    • observe the vivo.all.log for info messages detailing which RDF files are loaded and ignored

Interested parties

@VIVO-project/vivo-committers , @MichelHeon

… into triple store

Define name of available language listing file (found in Vitro-languages)
Update RDFFilesLoader method interfaces to include ServletContext

Part of resolution to: https://jira.lyrasis.org/browse/VIVO-1836
@gneissone
Copy link
Member

I'm having trouble understanding why we need to track the available locales in available-langs.properties. Can't we just load the files that have an enabled locale suffix in runtime.properties and ignore the others without tracking everything that's available? If the runtime.properties includes an invalid language VIVO throws a warning to the user already.

@gneissone
Copy link
Member

Do you need to know the locale suffixes to make sure we don't unintentionally omit extra (non-18n) files? If so, couldn't we use the locale suffix list in Java's getAvailableLocales() method and remove all files with those suffixes minus enabled languages?

@brianjlowe
Copy link
Member

brianjlowe commented Apr 29, 2020

I share that concern and made a similar comment on the other pull request: vivo-project/Vitro-languages#18 . I can appreciate now that there are practical problems with the kind of alternative I proposed due to the (silly, imo) lack of convention for naming properties files.

On the other hand, the problem with only loading files that terminate in an accepted locale string is that any given RDF directory can include files that are pure ontology axioms without language-specific literals, and we would not want to eliminate those. Off the top of my head, other possible approaches would be to (a) give all such non-language files a specific suffix forcing their inclusion regardless of language settings, or (b) arrange rdf files into top-level directories by language, including one top-level directory that is always loaded.

@awoods
Copy link
Member Author

awoods commented Apr 29, 2020

other possible approaches would be to (a) give all such non-language files a specific suffix forcing their inclusion regardless of language settings, or (b) arrange rdf files into top-level directories by language, including one top-level directory that is always loaded.

Either of these approaches seem feasible.

@gneissone , as @brianjlowe mentions, if you look in ${VIVO_HOME}/rdf you will see lots of non-i18n files that also need to be loaded.

@brianjlowe
Copy link
Member

I also noticed the getAvailableLocales() method, and it's probably worth investigating. I think we would just have to make sure that it doesn't raise the risk of (or at least document the possibility of) unexpected behavior where a specific locale string may exist in VIVO that does not have built-in support at the server/Java VM level.

@awoods
Copy link
Member Author

awoods commented Apr 29, 2020

Grappling with this issue during development, I had an "ah-ha" moment when I realized the whole problem can go away with the "available-langs.properties"... which provides 100% confidence since we know exactly which languages are available in the repo itself.

@brianjlowe
Copy link
Member

brianjlowe commented Apr 29, 2020

Yeah, but the idea of adding optional functionality by having to update one central registry always makes me nervous. It's like the problem of copying web.xml because you added a custom servlet and then if you forget to merge upstream changes you lose any new servlets anyone else adds and get frustrated when the app breaks in unpredictable ways at runtime. We have things like annotations now to allow you to add new functionality while avoiding that problem. Sure, we may wish that everyone add new language support collaboratively by carefully reading all the developer documentation and submitting pull requests to the central language repositories, but sooner or later someone won't, and they'll either get frustrated that their new language files aren't showing up because they missed that crucial step or they'll end up with a local override of available-langs and the next maintenance dev who comes on the project and performs an upgrade will wonder why the newly-advertised languages aren't showing up.

@awoods
Copy link
Member Author

awoods commented Apr 29, 2020

@brianjlowe : looking out for future robustness is a fair point. Renaming/Restructuring the VIVO-/Vitro-language files is reasonable... and now would be the time. I would suggest that such a change be done in a separate PR, but as a requirement before considering merging the sprint-i18n branches into master.

@brianjlowe
Copy link
Member

@awoods Sounds like a reasonable approach. E.g., a "blocker" issue for the -i8n release?

@awoods
Copy link
Member Author

awoods commented Apr 29, 2020

New ticket: https://jira.lyrasis.org/browse/VIVO-1848

@gneissone
Copy link
Member

gneissone commented Apr 29, 2020

@brianjlowe would a non-standard locale suffix even work? VIVO uses methods from the Locale library in various places that seem to rely on the suffix being valid, e.g. https://github.com/vivo-project/Vitro/blob/master/api/src/main/java/edu/cornell/mannlib/vitro/webapp/i18n/selection/LocaleSelectionDataGetter.java#L92. Out of the other proposals, I would strongly prefer that i18n files live in their own directory rather than giving all the other files a suffix to ensure inclusion.

@brianjlowe
Copy link
Member

brianjlowe commented Apr 29, 2020

Yep, it does appear that we already depend on VIVO's locales being "available" to the JVM the application is running in. Those locale objects are set up in LocalSelectionSetup.java, which includes this curious section

if (!"es_GO".equals(localeString) && // No complaint about bogus locale

if (!"es_GO".equals(localeString) && // No complaint about bogus locale
!LocaleUtils.isAvailableLocale(locale)) {
ssWarning("'" + locale + "' is not a recognized locale.");
}

so we are indeed already testing that each locale (except for "es-GO", which we let slide) is "available" to the JVM, evidently without problems so far. I don't know if a standard set of all known world locales is shipped with every JVM, or whether this depends on the configuration of the underlying OS. The docs for getAvailableLocales() say that only Locale.US is the minimum requirement. If there's a possibility that someone might need to do additional system-level configuration to enable support for a particular locale, we should probably document it.

I also agree that the directory-based layout would be much more elegant.

@gneissone
Copy link
Member

Hah, es_GO was the placeholder spanish included with VIVO that was created by running everything through Google Translate. It appears somebody went to great lengths to ensure nobody mistook that as a proper translation.

Copy link
Member

@gneissone gneissone left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested and works as advertised. It's a vast improvement over the current deployment procedure. Will be looking for an incremental improvement on this method per our discussion on Vitro #160 .

@brianjlowe brianjlowe merged commit 413184d into vivo-project:sprint-i18n May 1, 2020
@awoods awoods deleted the vivo-1836 branch June 23, 2020 17:56
roflinn added a commit that referenced this pull request Feb 10, 2021
* Layer uqam updates onto master (minus trailing whitespace)

* Update RDFServiceFactorySingle.java

* Sprint i18n whitespace (#143)

* Removed extraneous whitespace
   - modified:   api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BaseEditElementVTwo.java

* move RootUserPolicy.java from VIVO to Vitro repo.

* Remove blank line

* Fixed indentations

* Update whitespace for: TemplateProcessingHelper.java

* Update whitespace for: RDFServiceModel.java

* Removed extraneous whitespaces.

* Tagging UQAM Comments with following tags

-Add-Feature
-Optimization
-Linguistic-Management
-Bug-Correction

* Resolve compilation failures in Vitro tests

* Remove whitespace changes from SelectListGeneratorVTwo.java

* Add null check on field values of RDF Form (#158)

Resolves: https://jira.lyrasis.org/browse/VIVO-1800

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Fix incorrect tool-tip in language selection dropdown (#156)

Resolves: https://jira.lyrasis.org/browse/VIVO-1783

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Sprint i18n/lang filtering model (#159)

* Add language-aware graph filtering instead of layering on additional RDFService

Resolves: https://jira.lyrasis.org/browse/VIVO-1771

* Remove hardcoded link label (#161)

Resolves: https://jira.lyrasis.org/browse/VIVO-1779

* Enable filtering of non-enabled i18n language files from being loaded into triple store (#160)

Define name of available language listing file (found in Vitro-languages)
Update RDFFilesLoader method interfaces to include ServletContext

Part of resolution to: https://jira.lyrasis.org/browse/VIVO-1836

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Add i18n version of Edit page title (#157)

Related to: https://jira.lyrasis.org/browse/VIVO-1779

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Changing ontology extensions for n3 & assigning a base IRI to each (#163)

ontology

Co-authored-by: michelheon <heon@videotorn.ca>
Co-authored-by: Andrew Woods <awoods@duraspace.org>

https://jira.lyrasis.org/browse/VIVO-1862

* Update sprint-i18n with master branch (#166)

* Make data property richtext editor option selectable from UI

* [VIVO-1755] - Better error handling when reasoner disabled (#137)

* Better error handling when reasoner disabled

* Change reasoner error log message to debug

* Extend reasoner status error handling

* Improve reasoner error log message and extend to JenaAdminActions

* Bump up log level for admin action to 'warn' and edit admin panel error message

* Change Model writer lang from "N3-PP" to "N3" (#149)

Resolves: https://jira.lyrasis.org/browse/VIVO-1761

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* [VIVO-1851] - Add 'remove' option to named graph management page (#162)

* Add 'remove' option to named graph management page

Resolves: https://jira.lyrasis.org/browse/VIVO-1851

* [VIVO-1872] - Add download option to SPARQL Query page (#164)

* Add download option to SPARQL Query page

* Set SPARQL query results content type even if downloading

* Address pull request comments

Co-authored-by: gneissone <mbgross@wustl.edu>
Co-authored-by: Ralph O'Flinn <roflinn@users.noreply.github.com>
Co-authored-by: Andrew Woods <awoods@duraspace.org>

* [VIVO-1839] - Use language name for selector instead of flags (#165)

* Use language name for selector instead of flags
* Add country name to language selector
* Increase min-width of language dropdown
* Update data tree comment in languageSelector.ftl
* Min-width for language dropdown
* Language dropdown css adjustment
* Capitalize locale label
* Indent on languageSelector.ftl

Resolves: https://jira.lyrasis.org/browse/VIVO-1839

* Adds internationalization to the admin/sparql-query page (#167)

* Adds internationalization to the admin/sparql-query page

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1873

* Add i18n for 'save query result'

Related to: https://jira.lyrasis.org/browse/VIVO-1873

* code review

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* removed redundat files which are now available via Vitro- and VIVO-languages

* Making UQAM-optimization aware of https://

* Add parent reference to installer/pom.xml (#174)

Resolves: https://jira.lyrasis.org/browse/VIVO-1903

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Revert non-function RDF changes (#177)

Related to: https://jira.lyrasis.org/browse/VIVO-1905

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Ensure 'other' in Individual->Teaching->advisees->type is translated

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1881

* Re-add logic from commit 7420957

* [VIVO-1812] use i18n translation for validation messages (#179)

* replace constants with i18n text in BasicValidationVTwo
* use constants for i18n template key

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1812

* added js_string at i18n strings to handle quotes properly, ticket vivo-1842 (#180)

Partial resolution for: https://jira.lyrasis.org/browse/VIVO-1842

* [VIVO-1870] simplify and concat translation for browse by vclass (#182)

* simplify and concat translation for browse by vclass

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1870

* [VIVO-1900] i18n: added empty check for getCountry, fixing bug with spanish label (es) (#181)

* added empty check for getCountry, fixing bug with spanish label (es), ticket vivo-1900

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1900

* [VIVO 1870] update i18n key to JavaScript mapping (#183)

* update menupage-script i18n key to JavaScript mapping

Follow-on to resolution of: https://jira.lyrasis.org/browse/VIVO-1870

* [VIVO-1837] get i18n bundle from WebappDaoFactoryConfig preferred locales (#178)

* apply i18n text to VClassDaoJena.getLabelForClass
* expose i18n bundle through webapp dao factory interface
* use whole messages for i18n
* if request available use request bundle else use context bundle
* clear cache when context theme directory changes
* make getOverridingLocale from context private
* select locale based on preferred locale from webapp dao factory
* use first preferred local even when no selectable locales available on context
* build default preferred locales from default preferred languages

Resolves: https://jira.lyrasis.org/browse/VIVO-1837

* Ensure that "available langs" include base langs (#185)

Resolves: https://jira.lyrasis.org/browse/VIVO-1922

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Ensure I18nStub is initialized before pertinent tests (#186)

Resolves: https://jira.lyrasis.org/browse/VIVO-1923

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* add additional null checks to ensure context is ready for theme change (#187)

* [VIVO-1915] i18n - Adding a label with language tag through the "new" manageLabelsForindividualAddForm.ftl does not take the setting for language tag (#184)

* Fixed bug when addng a label with language tag through managLabelsForindividualAddForm, re ticket VIVO-1915

* removed the language select for managing multi language labels, ticket vivo-1915

* readded the fix for language selection because of the fr-CA version of the manageLabelsForIndividualftl, ticket vivo-1915

* removed earlier fix, removed comments, modified ManageLabelGenrator, ticket vivo-1915

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1915

* - replaced hard coded "or"s with i18n().or

* [VIVO-1925] i18n: Editing labels results in new label (#188)

* fixed bug: Editing language labels results in new label, ticket vivo-1925

Resolves: https://jira.lyrasis.org/browse/VIVO-1925

* Enable lang selection without need for 'available-langs.properties' (#169)

* Enable lang selection without need for 'available-langs.properties'
Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Reduce number of times QuerySolutions are looped in LanguageFilteringRDFService (#194)

- No functional change in this update

Resolves: https://jira.lyrasis.org/browse/VIVO-1931

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Prevent 'ProcessRdfForm.parseN3ToRDF' from using null linguisticContext (#197)

Resolves: https://jira.lyrasis.org/browse/VIVO-1944

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* [Vivo 1918] i18n: Reload firsttime files on start-up if changed (#195)

Co-authored-by: Andrew Woods <awoods@lyrasis.org>

* [VIVO-1936] i18n: updated the language comment in runtime.properties

* ftl function to capitalize group name affording override

* Further i18n for BasicValidationVTwo.java

* Fixed DeletePropertyController.java - getting localname of property properly (#200)

* Fixed DeletePropertyController.java - getting localname of property properly

Resolves: https://jira.lyrasis.org/browse/VIVO-1816

* Removed hardcoded time units by properties calls in dateTimeWithPrecision.ftl

* Use i18n values for date time form (#204)

Resolves: https://jira.lyrasis.org/browse/VIVO-1953

* VIVO-1929: patch authorizing create individual form (#206)

* patch authorizing create individual form

Resolves: https://jira.lyrasis.org/browse/VIVO-1929

* Issue/vivo 1947 (#205)

* Make data property richtext editor option selectable from UI
* Better error handling when reasoner disabled
* Change reasoner error log message to debug
* Extend reasoner status error handling
* Improve reasoner error log message and extend to JenaAdminActions
* Bump up log level for admin action to 'warn' and edit admin panel error message
* Change Model writer lang from "N3-PP" to "N3" (#149)
* Prevent ontology editor and N3 editing from deleting property values in languages other than the one associated with the editing request. [https://jira.lyrasis.org/browse/VIVO-1947]

Resolves: https://jira.lyrasis.org/browse/VIVO-1947

Co-authored-by: gneissone <mbgross@wustl.edu>
Co-authored-by: Ralph O'Flinn <roflinn@users.noreply.github.com>
Co-authored-by: Andrew Woods <awoods@lyrasis.org>
Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Remove comments

Co-authored-by: Andrew Woods <awoods@duraspace.org>
Co-authored-by: Nicolas D <46490666+nicalico@users.noreply.github.com>
Co-authored-by: VIVO UQAM <62542918+UQAM-VIVO@users.noreply.github.com>
Co-authored-by: Matthias Luehr <luehr@hs-mittweida.de>
Co-authored-by: michelheonuqam <heon.michel@uqam.ca>
Co-authored-by: Brian Lowe <brianjlowe@gmail.com>
Co-authored-by: j-dornbusch <joachim.dornbusch@ehess.fr>
Co-authored-by: Michel Heon <heon@videotron.ca>
Co-authored-by: gneissone <mbgross@wustl.edu>
Co-authored-by: Ralph O'Flinn <roflinn@users.noreply.github.com>
Co-authored-by: dofeldsc <dofeldsc@uos.de>
Co-authored-by: root <root@vivo-development.hs-mittweida.de>
Co-authored-by: gneissone <mbgross@unavco.org>
Co-authored-by: William Welling <wwelling@library.tamu.edu>
Co-authored-by: Kampe <Benjamin.Kampe@tib.eu>
Co-authored-by: Gross, Benjamin <benjamin.gross@clarivate.com>
Co-authored-by: matthiasluehr <60263380+matthiasluehr@users.noreply.github.com>
Co-authored-by: nicolasdickner <dickner.nicolas@uqam.ca>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants