diff --git a/package.json b/package.json index f753a31bd..33e2e94ca 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,8 @@ "@angular/platform-browser-dynamic": "^19.2.0", "@angular/router": "^19.2.0", "@angular/service-worker": "^19.2.0", + "@ngx-translate/core": "^16.0.4", + "@ngx-translate/http-loader": "^16.0.1", "@ngxs/devtools-plugin": "^19.0.0", "@ngxs/logger-plugin": "^19.0.0", "@ngxs/store": "^19.0.0", diff --git a/src/app/app.config.ts b/src/app/app.config.ts index db007ae47..138c2eae3 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -1,4 +1,8 @@ -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { + ApplicationConfig, + importProvidersFrom, + provideZoneChangeDetection, +} from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideStore } from '@ngxs/store'; @@ -10,6 +14,8 @@ import { provideHttpClient } from '@angular/common/http'; import { ConfirmationService } from 'primeng/api'; import { STATES } from '@core/constants/ngxs-states.constant'; import { provideServiceWorker } from '@angular/service-worker'; +import { provideTranslation } from '@core/helpers/i18n.helper'; +import { TranslateModule } from '@ngx-translate/core'; export const appConfig: ApplicationConfig = { providers: [ @@ -35,5 +41,6 @@ export const appConfig: ApplicationConfig = { registrationStrategy: 'registerWhenStable:30000', }), ConfirmationService, + importProvidersFrom(TranslateModule.forRoot(provideTranslation())), ], }; diff --git a/src/app/app.module.ts b/src/app/app.module.ts deleted file mode 100644 index a954734fc..000000000 --- a/src/app/app.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core'; -import { NgxsModule } from '@ngxs/store'; -import { AuthState } from '@core/store/auth'; -import { AddonsState } from '@osf/features/settings/addons/store'; -import { SearchState } from '@osf/features/search/store'; -import { TokensState } from '@osf/features/settings/tokens/store'; - -@NgModule({ - imports: [ - NgxsModule.forRoot([AuthState, TokensState, AddonsState, SearchState]), - ], -}) -export class AppModule {} diff --git a/src/app/core/components/footer/footer.component.html b/src/app/core/components/footer/footer.component.html index dda295506..fd5ac9aba 100644 --- a/src/app/core/components/footer/footer.component.html +++ b/src/app/core/components/footer/footer.component.html @@ -2,16 +2,23 @@
Enter your email address and we'll send a link to reset your password
+{{ "auth.forgotPassword.description" | translate }}
@@ -27,7 +27,7 @@You have successfully reset your password
++ {{ "auth.resetPassword.success.message" | translate }} +
Check your email to confirm your account
+{{ "auth.signUp.success.message" | translate }}
- Go to My Projects to organize your work or - search OSF + {{ "home.loggedIn.dashboard.quickSearch.goTo" | translate }} + + {{ "home.loggedIn.dashboard.quickSearch.myProjects" | translate }} + + {{ "home.loggedIn.dashboard.quickSearch.toOrganize" | translate }} + + {{ "home.loggedIn.dashboard.quickSearch.search" | translate }} + + {{ "home.loggedIn.dashboard.quickSearch.osf" | translate }}
- You don't have any bookmarks. Click the bookmark icon on projects - or registrations to add them here. -
+{{ "myProjects.bookmarks.emptyState" | translate }}
} @else {- Are you sure you want to disable this account? All projects connected to - this account will be affected. + {{ "settings.addons.messages.deleteConfirmation.message" | translate }}
- Sync your projects with external services to help stay connected and - organized. Select a category and browse the options. + {{ "settings.addons.description" | translate }}
- • This add-on connects your OSF project to an external service. - Use of this service is bound by its terms and conditions. The - OSF is not responsible for the service or for your use thereof. + {{ + "settings.addons.connectAddon.termsDescription" | translate + }}
- • This add-on allows you to store files using an external - service. Files added to this add-on are not stored within the - OSF. + {{ + "settings.addons.connectAddon.storageDescription" | translate + }}
- Please include the protocol (http:// or https://) in the URL. + {{ + "settings.addons.form.fields.hostUrlDescription" | translate + }}
-- Please include the protocol (http:// or https://) in the URL. + {{ + "settings.addons.form.fields.hostUrlDescription" | translate + }}
-These credentials will be encrypted
++ {{ + "settings.addons.form.fields.passwordDescription" + | translate + }} +
- This will distinguish your account from other using the same - addon. + {{ + "settings.addons.form.fields.accountNameDescription" + | translate + }}
@@ -173,7 +238,7 @@- Complete the OAuth process in the new window before returning to - this page. If you do not see a new window, please click the Start - Oauth link below. + {{ "settings.addons.connectAddon.oauthDescription" | translate }}
- Start OAuth + {{ "settings.addons.connectAddon.startOauth" | translate }} +- The client ID is the developer app's unique identifier and is safe - to share publicly. + {{ + "settings.developerApps.details.clientId.description" | translate + }}
- The client secret is available only to you. Keep it private and do - not share it. + {{ + "settings.developerApps.details.clientSecret.description" + | translate + }}
- Third-party web applications can connect to the OSF on behalf of users via - the OAuth 2.0 web application flow. + {{ "settings.developerApps.list.description" | translate }}