diff --git a/translations/messages.ru.xlf b/translations/messages.ru.xlf
index c748868b..f30e8d9f 100644
--- a/translations/messages.ru.xlf
+++ b/translations/messages.ru.xlf
@@ -11140,283 +11140,283 @@
-
+ part.info.amount.less_than_desiredLess than desired
-
+ log.cli_userCLI user
-
+ log.element_edited.changed_fields.part_owner_must_matchPart owner must match storage location owner
-
+ part.filter.lessThanDesired
-
+ In stock less than desired (total amount < min. amount)
-
+ part.filter.lotOwnerLot owner
-
+ user.show_email_on_profile.labelShow email on public profile page
-
+ log.details.titleLog details
-
+ log.user_login.login_from_ipLogin from IP address
-
+ log.user_login.ip_anonymize_hintIf the last digits of the IP address are missing, then the GPDR mode is enabled, in which IP addresses are anynomized.
-
+ log.user_not_allowed.unauthorized_access_attempt_toUnauthorized access attempt to page
-
+ log.user_not_allowed.hintThe request was blocked. No action should be required.
-
+ log.no_commentNo comment
-
+ log.element_changed.fieldField
-
+ log.element_changed.data_beforeData before change
-
+ error_table.errorAn error occured during your request.
-
+ part.table.invalid_regexInvalid regular expression (regex)
-
+ log.element_changed.data_afterData after change
-
+ log.element_changed.diffDifference
-
+ log.undo.undo.shortUndo
-
+ log.undo.revert.shortRevert to this timestamp
-
+ log.view_versionView version
-
+ log.undo.undelete.shortUndelete
-
+ log.element_edited.changed_fields.idID
-
+ log.element_edited.changed_fields.id_ownerOwner
-
+ log.element_edited.changed_fields.parent_idParent
-
+ log.details.delete_entryDelete log entry
-
+ log.delete.message.titleDo you really want to delete the log entry?
-
+ log.delete.messageIf this is an element history entry, this breaks the element history! This can lead to unexpected results when using the time travel function.
-
+ log.collection_deleted.on_collectionon Collection
-
+ log.element_edited.changed_fields.attachmentsAttachments
-
+ tfa_u2f.add_key.registration_errorAn error occurred during the registration of the security key. Try again or use another security key!
-
+ log.target_type.noneNone
-
+ ui.darkmode.lightLight
-
+ ui.darkmode.darkDark
-
+ ui.darkmode.autoAuto (decide based on system settings)
-
+ label_generator.no_lines_givenNo text content given! The labels will remain empty.
-
+ user.password_strength.very_weakVery weak
-
+ user.password_strength.weakWeak
-
+ user.password_strength.mediumMedium
-
+ user.password_strength.strongStrong
-
+ user.password_strength.very_strongVery strong
-
+ perm.users.impersonateImpersonate other users
-
+ user.impersonated_by.labelImpersonated by
-
+ user.stop_impersonationStop impersonation
-
+ user.impersonate.btnImpersonate
-
+ user.impersonate.confirm.titleDo you really want to impersonate this user?
-
+ user.impersonate.confirm.messageThis will be logged. You should only do this with a good reason.
@@ -11424,769 +11424,769 @@ Please note, that you can not impersonate a disabled user. If you try you will g
-
+ log.type.security.user_impersonatedUser impersonated
-
+ info_providers.providers_list.titleInformation providers
-
+ info_providers.providers_list.activeActive
-
+ info_providers.providers_list.disabledDisabled
-
+ info_providers.capabilities.basicBasic
-
+ info_providers.capabilities.footprintFootprint
-
+ info_providers.capabilities.picturePicture
-
+ info_providers.capabilities.datasheetDatasheets
-
+ info_providers.capabilities.pricePrices
-
+ part.info_provider_reference.badgeThe information provider used to create this part.
-
+ part.info_provider_referenceCreated by Information provider
-
+ oauth_client.connect.btnConnect OAuth
-
+ info_providers.table.provider.labelProvider
-
+ info_providers.search.keywordKeyword
-
+ info_providers.search.submitSearch
-
+ info_providers.search.providers.helpSelect the providers in which should be searched.
-
+ info_providers.search.providersProviders
-
+ info_providers.search.info_providers_listShow all available info providers
-
+ info_providers.search.titleCreate parts from info provider
-
+ oauth_client.flash.connection_successfulConnected to OAuth application successfully!
-
+ perm.part.info_providersInfo providers
-
+ perm.part.info_providers.create_partsCreate parts from info provider
-
+ entity.edit.alternative_names.labelAlternative names
-
+ entity.edit.alternative_names.helpThe alternative names given here, are used to find this element based on the results of the information providers.
-
+ info_providers.form.help_prefixProvider
-
+ update_manager.new_version_available.titleNew version available
-
+ update_manager.new_version_available.textA new version of Part-DB is available. Check it out here
-
+ update_manager.new_version_available.only_administrators_can_seeOnly administrators can see this message.
-
+ perm.system.show_available_updatesShow available Part-DB updates
-
+ user.settings.api_tokensAPI tokens
-
+ user.settings.api_tokens.descriptionUsing an API token, other applications can access Part-DB with your user rights, to perform various actions using the Part-DB REST API. If you delete an API token here, the application, which uses the token, will no longer be able to access Part-DB on your behalf.
-
+ api_tokens.nameName
-
+ api_tokens.access_levelAccess level
-
+ api_tokens.expiration_dateExpiration date
-
+ api_tokens.added_dateAdded at
-
+ api_tokens.last_time_usedLast time used
-
+ datetime.neverNever
-
+ api_token.validValid
-
+ api_token.expiredExpired
-
+ user.settings.show_api_documentationShow API documentation
-
+ api_token.create_newCreate new API token
-
+ api_token.level.read_onlyRead-Only
-
+ api_token.level.editEdit
-
+ api_token.level.adminAdmin
-
+ api_token.level.fullFull
-
+ api_tokens.access_level.helpYou can restrict, what the API token can access. The access is always limited by the permissions of your user.
-
+ api_tokens.expiration_date.helpAfter this date, the token is not usable anymore. Leave empty if the token should never expire.
-
+ api_tokens.your_token_isYour API token is
-
+ api_tokens.please_save_itPlease save it. You will not be able to see it again!
-
+ api_tokens.create_new.back_to_user_settingsBack to user settings
-
+ project.build.dont_check_quantityDo not check quantities
-
+ project.build.dont_check_quantity.helpIf this option is selected, the given withdraw quantities are used as given, no matter if more or less parts are actually required to build this project.
-
+ part_list.action.invert_selectionInvert selection
-
+ perm.apiAPI
-
+ perm.api.access_apiAccess API
-
+ perm.api.manage_tokensManage API tokens
-
+ user.settings.api_tokens.delete.titleDo you really want to delete this API token?
-
+ user.settings.api_tokens.deleteDelete
-
+ user.settings.api_tokens.delete.messageThe application, which uses this API token, will no longer have access to Part-DB. This action can not be undone!
-
+ api_tokens.deletedAPI token deleted successfully!
-
+ user.settings.api_tokens.no_api_tokens_yetNo API tokens configured yet.
-
+ api_token.ends_withEnds with
-
+ entity.select.creating_new_entities_not_allowedYou are not allowed to create new entities of this type! Please choose a pre-existing one.
-
+ scan_dialog.modeBarcode type
-
+ scan_dialog.mode.autoAuto detect
-
+ scan_dialog.mode.ipnIPN barcode
-
+ scan_dialog.mode.internalPart-DB barcode
-
+ part_association.labelPart association
-
+ part.edit.tab.associationsAssociated parts
-
+ part_association.edit.other_partAssociated part
-
+ part_association.edit.typeRelation Type
-
+ part_association.edit.commentNotes
-
+ part_association.edit.type.helpYou can select here, how the chosen part is related to this part.
-
+ part_association.table.from_this_partAssociations from this part to others
-
+ part_association.table.fromFrom
-
+ part_association.table.typeRelation
-
+ part_association.table.toTo
-
+ part_association.type.compatibleIs compatible with
-
+ part_association.table.to_this_partAssociations to this part from others
-
+ part_association.type.otherOther (custom value)
-
+ part_association.type.supersedesSupersedes
-
+ part_association.edit.other_typeCustom type
-
+ part_association.edit.delete.confirmDo you really want to delete this association? This can not be undone.
-
+ part_lot.edit.advancedExpand advanced options
-
+ part_lot.edit.vendor_barcodeVendor barcode
-
+ part_lot.edit.vendor_barcode.helpIf this lot already have a barcode (e.g. put there by the vendor), you can input its content here, to easily scan it.
-
+ scan_dialog.mode.vendorVendor barcode (configured in part lot)
-
+ project.bom.instockAmountStocked amount
-
+ collection_type.new_element.tooltipThis element was newly created and was not persisted to the database yet.
-
+ part.merge.titleMerge part
-
+ part.merge.title.intointo
-
+ part.merge.confirm.title
- %other% into %target%?]]>
+ Do you really want to merge <b>%other%</b> into <b>%target%</b>?
-
+ part.merge.confirm.message
- %other% will be deleted, and the part will be saved with the shown information.]]>
+ <b>%other%</b> will be deleted, and the part will be saved with the shown information.
-
+ part.info.merge_modal.titleMerge parts
-
+ part.info.merge_modal.other_partOther part
-
+ part.info.merge_modal.other_into_thisMerge other part into this one (delete other part, keep this one)
-
+ part.info.merge_modal.this_into_otherMerge this part into other one (delete this part, keep other one)
-
+ part.info.merge_btnMerge part
-
+ part.update_part_from_info_provider.btnUpdate part from info providers
-
+ info_providers.update_part.titleUpdate existing part from info provider
-
+ part.merge.flash.please_reviewData not saved yet. Review the changes and click save to persist the new data.
-
+ user.edit.flash.permissions_fixedPermissions required by other permissions were missing. This was corrected. Please check if the permissions are as you intended.
-
+ permission.legend.dependency_notePlease note that some permission operations depend on each other. If you encounter a warning that missing permissions were corrected and a permission was set to allow again, you have to set the dependent operation to forbid too. The dependents can normally found right of an operation.
-
+ log.part_stock_changed.timestampTimestamp
-
+ part.info.withdraw_modal.timestampAction timestamp
-
+ part.info.withdraw_modal.timestamp.hintThis field allows you to specify the real date, when the stock operation actually was performed, and not just when it was logged. This value is saved in the extra field of the log entry.
-
+ part.info.withdraw_modal.delete_lot_if_emptyDelete this lot, if it becomes empty
-
+ info_providers.search.error.client_exceptionAn error occurred while communicating with the information provider. Check the configuration for this provider and refresh the OAuth tokens if possible.
-
+ eda_info.reference_prefix.placeholdere.g. R
-
+ eda_info.reference_prefixReference prefix
-
+ eda_info.kicad_section.titleKiCad specific settings
-
+ eda_info.valueValue
-
+ eda_info.value.placeholdere.g. 100n
-
+ eda_info.exclude_from_bomExclude part from BOM
-
+ eda_info.exclude_from_boardExclude part from PCB/Board
-
+ eda_info.exclude_from_simExclude part from simulation
-
+ eda_info.kicad_symbolKiCad schematic symbol
-
+ eda_info.kicad_symbol.placeholdere.g. Transistor_BJT:BC547
-
+ eda_info.kicad_footprintKiCad footprint
-
+ eda_info.kicad_footprint.placeholdere.g. Package_TO_SOT_THT:TO-92
-
+ part.edit.tab.edaEDA information
-
+ api.api_endpoints.titleAPI endpoints
-
+ api.api_endpoints.partdbPart-DB API
-
+ api.api_endpoints.kicad_root_urlKiCad API root URL
-
+ eda_info.visibilityForce visibility
-
+ eda_info.visibility.helpBy default, the visibility to the EDA software is automatically determined. With this checkbox, you can force the part to be visible or invisible.
-
+ part.withdraw.zero_amountYou tried to withdraw/add an amount of zero! No action was performed.
-
+ login.flash.access_denied_please_loginAccess denied! Please log in to continue.