diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9e5d5c8f6fb5a91f14b059a96b7a2ab9c260ea1d..bc365940e5a9b23c15cbc52f2be5d80276b42d38 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Added
 - Added academic periods and levels to job offers. @toberhuber
 - Added filtering by academic periods. @toberhuber
+- Aria labels to all buttons/links used as buttons. @toberhuber
 - Show salary scale on search people page @dsavvidi
 - Add academic period filters to application exports @toberhuber
 - Add support for multiple program selection when exporting applications @toberhuber
@@ -32,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Changed
 
 ### Fixed
+- Made all text dynamic instead of hard-coded. @toberhuber
 - Exporting contract requests now has batches. @rwbackx
 - Toggling state now saved on Job Offers Page for Students @dsavvidi
 - Retracting a contract request gave a constraint violation exception @dsavvidi
diff --git a/src/main/resources/email/html/application_offered.html b/src/main/resources/email/html/application_offered.html
index 2cff7fe167715e2615f5956cf48b1228ca94de35..f9be7e12201a874f0c708f2d419ff4e008b62835 100644
--- a/src/main/resources/email/html/application_offered.html
+++ b/src/main/resources/email/html/application_offered.html
@@ -26,21 +26,19 @@
 
     <body>
         <div>
-            <!--            <div>-->
-            <!--                <h1 style="color: #00a6d6; font-size: 2em" th:text="#{general.app_name}"></h1>-->
-            <!--            </div>-->
             <div style="width: 100%; background-color: #00a8db">
                 <a th:href="#{general.app_url}" style="text-decoration: none">
                     <img
                         th:src="|#{general.app_url}/img/tudelft_logo.png|"
                         style="height: 40px; padding-left: 0.2em" />
-                    <span style="color: white; font-size: 40px">| TAM</span>
+                    <span
+                        style="color: white; font-size: 40px"
+                        th:text="#{email.applicationName}"></span>
                 </a>
             </div>
 
             <div>
                 <div style="padding: 0.5em 0">
-                    <!--                    <h2 th:text="#{email.application.offered.title(${position})}"></h2>-->
                     <p th:text="#{email.greeting(${name})}"></p>
                     <p
                         th:text="#{email.application.offered.message(${position}, ${course}, ${year})}"></p>
diff --git a/src/main/resources/email/html/application_rejected.html b/src/main/resources/email/html/application_rejected.html
index 1f2482bcde87dec3d2b78db944a91c102051d96c..b21660248e59396645bbb45996596c0ca17d5cf2 100644
--- a/src/main/resources/email/html/application_rejected.html
+++ b/src/main/resources/email/html/application_rejected.html
@@ -26,21 +26,19 @@
 
     <body>
         <div>
-            <!--            <div>-->
-            <!--                <h1 style="color: #00a6d6; font-size: 2em" th:text="#{general.app_name}"></h1>-->
-            <!--            </div>-->
             <div style="width: 100%; background-color: #00a8db">
                 <a th:href="#{general.app_url}" style="text-decoration: none">
                     <img
                         th:src="|#{general.app_url}/img/tudelft_logo.png|"
                         style="height: 40px; padding-left: 0.2em" />
-                    <span style="color: white; font-size: 40px">| TAM</span>
+                    <span
+                        style="color: white; font-size: 40px"
+                        th:text="#{email.applicationName}"></span>
                 </a>
             </div>
 
             <div>
                 <div style="padding: 0.5em 0">
-                    <!--                    <h2 th:text="#{email.application.rejected.title}"></h2>-->
                     <p th:text="#{email.greeting(${name})}"></p>
                     <br />
                     <p
diff --git a/src/main/resources/email/html/application_submitted.html b/src/main/resources/email/html/application_submitted.html
index 60e88b9f49edc5485eee65f61ba4a8495d42ae3d..0e7e6fd3487e59a6ca344ed58562ecbe6e7e2bc1 100644
--- a/src/main/resources/email/html/application_submitted.html
+++ b/src/main/resources/email/html/application_submitted.html
@@ -26,21 +26,19 @@
 
     <body>
         <div>
-            <!--            <div>-->
-            <!--                <h1 style="color: #00a6d6; font-size: 2em" th:text="#{general.app_name}"></h1>-->
-            <!--            </div>-->
             <div style="width: 100%; background-color: #00a8db">
                 <a th:href="#{general.app_url}" style="text-decoration: none">
                     <img
                         th:src="|#{general.app_url}/img/tudelft_logo.png|"
                         style="height: 40px; padding-left: 0.2em" />
-                    <span style="color: white; font-size: 40px">| TAM</span>
+                    <span
+                        style="color: white; font-size: 40px"
+                        th:text="#{email.applicationName}"></span>
                 </a>
             </div>
 
             <div>
                 <div style="padding: 0.5em 0">
-                    <!--                    <h2 th:text="#{email.application.submitted.title}"></h2>-->
                     <p th:text="#{email.greeting(${name})}"></p>
                     <p
                         th:text="#{email.application.submitted.message(${position}, ${course}, ${year})}"></p>
diff --git a/src/main/resources/email/html/declaration_approved.html b/src/main/resources/email/html/declaration_approved.html
index 4e01c3aa4b49053443133795a1e92cccdc135a1d..df4823a86d0ef5c33e2ab0a8ba680a7d55a64a09 100644
--- a/src/main/resources/email/html/declaration_approved.html
+++ b/src/main/resources/email/html/declaration_approved.html
@@ -26,21 +26,19 @@
 
     <body>
         <div>
-            <!--            <div>-->
-            <!--                <h1 style="color: #00a6d6; font-size: 2em" th:text="#{general.app_name}"></h1>-->
-            <!--            </div>-->
             <div style="width: 100%; background-color: #00a8db">
                 <a th:href="#{general.app_url}" style="text-decoration: none">
                     <img
                         th:src="|#{general.app_url}/img/tudelft_logo.png|"
                         style="height: 40px; padding-left: 0.2em" />
-                    <span style="color: white; font-size: 40px">| TAM</span>
+                    <span
+                        style="color: white; font-size: 40px"
+                        th:text="#{email.applicationName}"></span>
                 </a>
             </div>
 
             <div>
                 <div style="padding: 0.5em 0">
-                    <!--                    <h2 th:text="#{email.declaration.approved.title}"></h2>-->
                     <p th:text="#{email.greeting(${name})}"></p>
                     <p
                         th:text="#{email.declaration.approved.message(${hours}, ${extraWork}, ${course}, ${year})}"></p>
diff --git a/src/main/resources/email/html/declaration_rejected.html b/src/main/resources/email/html/declaration_rejected.html
index a0bc173e6b19c4242db5e8b940b66359b6516d19..07edb04d0e8a62a97f60d315c8289b14eed123e1 100644
--- a/src/main/resources/email/html/declaration_rejected.html
+++ b/src/main/resources/email/html/declaration_rejected.html
@@ -26,21 +26,19 @@
 
     <body>
         <div>
-            <!--            <div>-->
-            <!--                <h1 style="color: #00a6d6; font-size: 2em" th:text="#{general.app_name}"></h1>-->
-            <!--            </div>-->
             <div style="width: 100%; background-color: #00a8db">
                 <a th:href="#{general.app_url}" style="text-decoration: none">
                     <img
                         th:src="|#{general.app_url}/img/tudelft_logo.png|"
                         style="height: 40px; padding-left: 0.2em" />
-                    <span style="color: white; font-size: 40px">| TAM</span>
+                    <span
+                        style="color: white; font-size: 40px"
+                        th:text="#{email.applicationName}"></span>
                 </a>
             </div>
 
             <div>
                 <div style="padding: 0.5em 0">
-                    <!--                    <h2 th:text="#{email.declaration.rejected.title}"></h2>-->
                     <p th:text="#{email.greeting(${name})}"></p>
                     <p
                         th:text="#{email.declaration.rejected.message(${hours}, ${extraWork}, ${course}, ${year})}"></p>
diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties
index 6f30e5d6f2c824cd37ee9f492a8b3ad04ee7eea7..15b15137668929b414c963107861da506d15cbd5 100644
--- a/src/main/resources/messages.properties
+++ b/src/main/resources/messages.properties
@@ -15,12 +15,26 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #
+
+# General
 general.app_name = TAM
+general.app_name.long = Teaching Assistant Management
 general.app_url = https://ta.ewi.tudelft.nl
 general.help_url = https://eip.pages.ewi.tudelft.nl/labrador/tam/tam
-general.login = Log in
 general.privacy_statement = Privacy Statement
 general.error = Oops! Something went wrong :(
+general.description = Description
+general.date = Date
+general.name = Name
+general.name.enter = Enter Name...
+general.actions = Actions
+general.help = Need help?
+general.loadingPlaceholder = Content goes here.
+general.username = Username
+general.password = Password
+# General Actions
+general.login = Log in
+general.logout = Logout
 general.cancel = Cancel
 general.create = Create
 general.save = Save
@@ -28,11 +42,6 @@ general.saveChanges = Save Changes
 general.submit = Submit
 general.yes = Yes
 general.no = No
-general.actions = Actions
-general.name = Name
-general.name.enter = Enter Name...
-general.description = Description
-general.date = Date
 general.send = Send
 general.add = Add
 general.approve = Approve
@@ -49,9 +58,35 @@ general.edit = Edit
 general.download = Download
 general.downloadTemplate = Download Template
 general.filter = Filter
+general.viewPerson.ariaLabel = View the following person: {0}
+general.expand = Expand Accordion
+general.selectAll = Select All
+# General Pagination
+general.pagination = Pagination
+general.pagination.previousPage = Previous Page
+general.pagination.nextPage = Next Page
+general.pagination.ellipsis = Ellipsis
+general.pagination.page = Page
+
+# Homepage General
+homepage.welcome = Welcome to TAM! To log in, click the button in the top right.
+homepage.students = Students
+homepage.students.message = As a student, you can sign up to become a teaching assistant and indicate your availability and willingness to assist courses. When your eligibility is approved you can be selected to assist a course.
+homepage.teachers = Course Staff
+homepage.teachers.message = As a lecturer, you can register your course and indicate the need for teaching assistants. An overview of interested students is provided, using which you can send job offers to the selected candidates.
+homepage.why = Why become a TA?
+homepage.why.one = You meet other excellent students from other years, studies, and specialties.
+homepage.why.two = Working as a TA shows future employers that:
+homepage.why.two.one = You have an even better understanding of the material, allowing you to explain material to others.
+homepage.why.two.two = You are comfortable communicating with people.
+homepage.why.three = You get the opportunity to network with staff from TU Delft, helping you find future projects (like a bachelor or master thesis, PhD, etc.).
+homepage.why.four = You have a flexible work schedule that you can adapt to fit with your own study program.
+homepage.why.five = You receive an hourly financial compensation for your work (see flexdelft.nl for more information).
 
+# Course General
 course = Course
 
+# Edition General
 edition = Edition
 edition.create = Create Edition
 edition.previous = Previous Editions
@@ -65,26 +100,34 @@ edition.endDate = End Date
 edition.endDate.enter = Enter end date... (dd-mm-yyyy HH:mm)
 edition.endDate.tooltip = Enter a date after the last resit for this edition.
 edition.name.tooltip = Enter only the 'edition' part of the name, e.g. '23/24 Q1'
-edition.enrollability = Enrollment Policy
+edition.empty = No job offers or extra work created.
+# Edition Enrollability
+edition.enrollability = Enrolment Policy
 edition.enrollability.open = Open
 edition.enrollability.open_to_program = Open to Program
 edition.enrollability.closed = Closed (Manual Import)
 
+# Profile General
 profile = Your Profile
+profile.short = Profile
+# Profile Training
 profile.training = TA Training
 profile.training.complete = Completed
 profile.training.complete.number = {0} Training(s) Completed
 profile.training.complete.none = No trainings completed yet, you should get an invitation to one as soon as you've been hired for your first TA position!
 profile.training.details = TA Training Details
 profile.training.details.action = View Training Details
+# Profile PayScale
 profile.payscale = Payscale
 profile.payscale.update = Request higher payscale
 profile.undetermined = Not Determined
+# Profile Polo
 profile.polo = Polo
 profile.polo.update = Change polo preference
 profile.polo.size = Polo Size
 profile.polo.gender = Polo Gender
 profile.polo.edit = Edit Polo Preferences
+# Profile Notifications
 profile.notifications = Notifications
 profile.notifications.update = Change notification preferences
 profile.notifications.emailOn = Emails Enabled
@@ -92,9 +135,11 @@ profile.notifications.emailOff = Emails Disabled
 profile.notifications.edit = Edit Notification Preferences
 profile.notifications.email = Email Notifications
 profile.notifications.frequency = Email Frequency
+# Profile Experience
 profile.experience = Experience (as known to TAM)
 profile.noExperience = No previous recorded TA experience. (This person might have been a TA before, but TAM does not know about it.)
 
+# Job Offer General
 jobOffer = Job Offer
 jobOffer.many = Job Offers
 jobOffer.search = Course / Position ...
@@ -147,29 +192,53 @@ jobOffer.import.info.editionCreate.columnOrder = Cohort Name, Program Name, Edit
 jobOffer.import.missingEditions = Missing Editions
 jobOffer.import.missingEditions.desc = Some of the editions you are trying to create job offers for do not exist yet. Select the editions you wish to create below.
 jobOffer.deadline = Deadline For Applying
-jobOffer.draft = Make Draft
 jobOffer.deadline.none = No Deadline
 jobOffer.deadline.closed = Closed
 jobOffer.date.enter = Enter a deadline...
-jobOffer.name.enter = Enter a name (eg: TA, Mentor, ...)
+jobOffer.name.enter = Enter a name (e.g.: TA, Mentor, ...)
 jobOffer.username.enter = Enter the exact username...
 jobOffer.studentNumber.enter = Enter the exact student number...
 jobOffer.studentName.enter = Enter the student's name... (CaSe SenSitIve)
-jobOffer.description.enter = Enter a description (eg: TA, Mentor, ...)
+jobOffer.description.enter = Enter a description (e.g.: TA, Mentor, ...)
 jobOffer.descriptionMessage = Job Information
 jobOffer.descriptionMessage.view = View Job Information
 jobOffer.descriptionMessage.enter = A message that a student sees before applying... (markdown supported)
 jobOffer.hiringMessage = Hiring Message
 jobOffer.hiringMessage.blank = Currently no hiring message configured.
 jobOffer.hiringMessage.enter = An optional message that a student will see after receiving the offer...
+jobOffer.hiringMessage.edit = Edit Hiring Message
+jobOffer.hiringMessage.add = Add Hiring Message
+jobOffer.hiringMessage.view = View hiring message
 jobOffer.rejectMessage = Rejection Message
 jobOffer.rejectMessage.enter = An optional message that a rejected student will see...
 jobOffer.rejectMessage.view = View rejection message
 jobOffer.rejectMessage.alert = Rejection message has not been altered or is empty!
-jobOffer.hiringMessage.edit = Edit Hiring Message
-jobOffer.hiringMessage.add = Add Hiring Message
-jobOffer.hiringMessage.view = View hiring message
 jobOffer.details = Job Offer Details
+jobOffer.empty = No Open Job Offers
+jobOffer.empty.description = There are currently no open job offers. Come back later to see if there is something new.
+jobOffer.before = TAed Before
+jobOffer.queueFeedback = Queue Feedback
+jobOffer.queueFeedback.view = View feedback
+jobOffer.selectProgram = Select a programme to view job offers.
+jobOffer.viewDetails = View offer
+jobOffer.response = Response
+jobOffer.requireResponse = Require response to job information
+jobOffer.responseRequired = This job offer requires a response to the above information.
+jobOffer.providesInformation = This job offer provides the following information:
+jobOffer.providesNoInformation = This job offer provides no additional information.
+jobOffer.noResults.description = No job offers matching your search found.
+jobOffer.messages = Messages
+jobOffer.information Job Information
+# Job Offer Import
+jobOffer.import = Import Job Offers
+jobOffer.import.successful = Successfully imported {0} job offer(s).
+jobOffer.import.info = Import bulk job offers via a CSV file. The first line is considered as headers and will not be read. Each job offer should be a separate row, with the following columns in this order:
+jobOffer.import.info.columnOrder = Edition Name, Course Code, Job Offer Description, Contract Name, Contract Start Date, Contract End Date, Contract Baan Code, Max Hours, Job Information, Require Response to Job Information (yes/no), Hiring Message, Rejection Message, Application Deadline
+jobOffer.import.info.editionCreate = If you want to create non-existing/new editions, add the following columns in this order:
+jobOffer.import.info.editionCreate.columnOrder = Cohort Name, Program Name, Edition Start Date, Edition End Date
+jobOffer.import.missingEditions = Missing Editions
+jobOffer.import.missingEditions.desc = Some of the editions you are trying to create job offers for do not exist yet. Select the editions you wish to create below.
+# Job Offer Actions
 jobOffer.edit = Edit Job Offer
 jobOffer.closeDeadline = Close New Applications
 jobOffer.closeDeadline.desc = Are you sure you want to close new applications? No other people will be able to apply to this job offer anymore.
@@ -181,14 +250,36 @@ jobOffer.rejectAll.desc = Are you sure you want to reject all open applications?
 jobOffer.rejectSelected.desc = Are you sure you want to reject all selected applications?
 jobOffer.addOffer = Offer Positions
 jobOffer.addOffer.desc = Search for student(s) using their NetID, student number, or name, with each separate student on a new line.
-jobOffer.addOffer.notFound = No students matching this query found. Try checking the capitalization since the search is CaSe SenSitIve.
+jobOffer.addOffer.notFound = No students matching this query found. Try checking the capitalisation since the search is CaSe SenSitIve.
 jobOffer.addOffer.confirm = Confirm Offering to All
 jobOffer.addOffer.confirm.desc = Are you sure you would like to offer a position to the following people:
-jobOffer.empty = No Open Job Offers
 jobOffer.hide = Hide Offer
 jobOffer.hide.info = This job offer is hidden. It cannot be seen by students. If this job offer should not be hidden, you can make it visible by pressing 'Publish Offer' below.
 jobOffer.show = Publish Offer
-jobOffer.empty.description = There are currently no open job offers. Come back later to see if there is something new.
+jobOffer.apply = Apply
+jobOffer.accept = Accept
+jobOffer.reject = Reject
+jobOffer.promote = Promote
+jobOffer.promote.confirm = Confirm Promotion
+jobOffer.promote.confirm.desc = Are you sure you would like to promote the following people:
+jobOffer.demote = Demote
+jobOffer.demote.confirm = Confirm Demote
+jobOffer.demote.confirm.desc = Are you sure you would like to demote the following people:
+jobOffer.reject.confirm = Confirm Rejection
+jobOffer.reject.confirm.desc = Are you sure you would like to reject the following people:
+jobOffer.offer = Send Offer
+jobOffer.offer.confirm = Confirm Offer
+jobOffer.offer.confirm.desc = Are you sure you would like to offer a position to the following people:
+jobOffer.offerToAll = Send Offer to All
+jobOffer.offerToSelected = Send Offers to Selected
+jobOffer.retract = Retract
+jobOffer.retract.confirm = Confirm Retraction
+jobOffer.retract.confirm.desc = Are you sure you would like to retract your application for the following positions:
+jobOffer.add = New Job Offer
+jobOffer.draft = Make Draft
+jobOffer.includeJobOffer = Include Job Offer
+jobOffer.viewJobOffersFor = View job offers for:
+# Job Offer Export
 jobOffer.export = Export Applications
 jobOffer.export.FlexDelft = FlexDelft Export
 jobOffer.export.updatedSince = Updated Since
@@ -227,6 +318,7 @@ jobOffer.academicLevel.MASTER2 = Master 2
 jobOffer.academicLevel.MINOR = Minor
 jobOffer.academicLevel.OTHER = Other
 
+# Application General
 application.all = All Applications
 application.my = My Applications
 application.many = Applications
@@ -235,24 +327,30 @@ application.applied = Applied
 application.empty = Currently no applications. Try applying to some positions.
 application.empty.staff = Currently no applications to review.
 application.search = Course / Position / Status …
+application.search.ariaLabel = Search course, status, or position
+# Application Manager
 application.manager.search = Person / Status …
 application.number.submitted = # of applications
 application.number.offered = # of offers
 application.number.accepted = # of accepted
+# Application Status
 application.status.open = Open
 application.status.submitted = Applied
 application.status.offered = Offered
 application.status.accepted = Accepted
 application.status.rejected = Rejected
+# Application Response
 application.content = Response
 application.noContent = No response
 application.enterContent = Enter response
 application.viewContent = View response
 
+# Role General
 role = Role
 role.ta = TA
 role.head_ta = Head TA
 
+# Extra Work General
 extraWork = Contract Request
 extraWork.many = Contract Requests
 extraWork.description = Work Description
@@ -273,23 +371,22 @@ extraWork.reason = Explanation of Hours Worked
 extraWork.reason.short = Explanation
 extraWork.reason.view = View Explanation
 extraWork.status = Status
-extraWork.retract = Retract
-extraWork.retract.confirm = Confirm Retraction
-extraWork.retract.confirm.desc = Are you sure you would like to retract your contract requests for the following extra work:
 extraWork.search = Course / Position ...
+extraWork.deadline = Deadline For Contract Requests
+extraWork.deadline.none = No Deadline
+extraWork.deadline.closed = Closed
+extraWork.date.enter = Enter a deadline...
+extraWork.description.enter = Enter a description (e.g.: Grading, Oral checks, …)
+extraWork.details = Extra Work Details
 extraWork.empty = No Contract Requests Available
 extraWork.empty.description = There is currently no open extra work. Come back later to see if there is something new.
 extraWork.add = New Extra Work
+# Extra Work Imports
 extraWork.import = Import Extra Work
 extraWork.import.info = Import bulk extra work via a file (CSV, XLSX). The first line is considered as headers and will not be read. Each extra work offer should be a separate row, with the following columns in this order:
 extraWork.import.info.columnOrder = Edition Name, Course Code, Work Name, Contract Name, Contract Baan Code, Max Hours, Contract Request Deadline
 extraWork.import.info.downloadTemplate = Download Template
-extraWork.deadline = Deadline For Contract Requests
-extraWork.deadline.none = No Deadline
-extraWork.deadline.closed = Closed
-extraWork.date.enter = Enter a deadline...
-extraWork.description.enter = Enter a description (eg: Grading, Oral checks, …)
-extraWork.details = Extra Work Details
+# Extra Work Actions
 extraWork.edit = Edit Extra Work
 extraWork.approve = Approve
 extraWork.approve.confirm = Confirm Approval
@@ -303,9 +400,14 @@ extraWork.rejectAll = Reject All Open Contract Requests
 extraWork.rejectAll.desc = Are you sure you want to reject all contract requests? All contract requests that have not been approved yet, will be rejected.
 extraWork.approveAll = Approve All Open Contract Requests
 extraWork.approveAll.desc = Are you sure you want to approve all contract requests? All contract requests that have not been approved or rejected, will be approved.
+extraWork.retract = Retract
+extraWork.retract.confirm = Confirm Retraction
+extraWork.retract.confirm.desc = Are you sure you would like to retract your contract requests for the following extra work:
+# Extra Work Exports
 extraWork.export = Export Contract Requests
 extraWork.export.FlexDelft = FlexDelft Export
 
+# Declaration General
 declaration.all = All Contract Requests
 declaration.my = My Contract Requests
 declaration.many = Contract Requests
@@ -316,15 +418,18 @@ declaration.empty.staff = Currently no submitted contract requests to review.
 declaration.search = Course / Description / Status …
 declaration.manager.search = Person / Status …
 declaration.number.submitted = # of contract requests
+# Declaration Hours
 declaration.hours.submitted = total declared time
 declaration.hours.accepted = total approved time
 declaration.hours.worked = Time Worked
 declaration.hours.reason = Explanation of Hours Worked
 declaration.hours.reason.short = Explanation
+# Declaration Errors
 declaration.error.zeroTime = You cannot declare a time of 00:00.
 declaration.error.remainingTime = Time declared must not be greater than time remaining.
 declaration.error.reason = Please provide an explanation for your declared hours. It should be between 10 - 140 characters.
 
+# Status Job Offer
 status.jobOffer.submitted = Submitted
 status.jobOffer.rejected_by_student = Offer Rejected
 status.jobOffer.rejected_by_teacher = Rejected
@@ -332,22 +437,26 @@ status.jobOffer.offered = Offered
 status.jobOffer.accepted = Accepted
 status.jobOffer.promoted = Promoted
 
+# Status Extra Work
 status.extraWork.submitted = Submitted
 status.extraWork.rejected_by_student = Retracted
 status.extraWork.rejected_by_teacher = Rejected
 status.extraWork.accepted = Approved
 
+# Manager General
 manager.portal = Manager Portal
 manager.empty = Currently no managed courses.
 manager.managed = Managed Courses
 manager.coordinator = Coordinating Courses
 
+# Person General
 person.select = Select
 person.name = Full Name
 person.username = NetID
 person.number = Student Number
 person.email = Email Address
 
+# Profile Raise Requests
 profile.raiseRequest.create = Edit Pay Scale
 profile.raiseRequest.info = You can submit a request for a change in your pay scale, choose the new pay scale and \
   provide proof you are eligible for the corresponding pay scale. To get the proof to download the pdf file with your \
@@ -365,8 +474,12 @@ profile.raiseRequest.open.text = The raise request is being processed by the sta
 profile.raiseRequest.retract = Retract
 profile.raiseRequest.fileProof = File Proof
 
+# Raise Requests General
 raiseRequest.view = View proof
+raiseRequest.error = Cannot display PDF.
+raiseRequest.error.alternative = Download Instead.
 
+# PayScale General
 payscale = PayScale
 payscale.requests = Raise Requests
 payscale.pending = Pending Raise Requests
@@ -376,9 +489,10 @@ payscale.current = Current PayScale
 payscale.requested = Requested PayScale
 payscale.proof = Proof
 payscale.download = Download
+# PayScale Import
 payscale.import = Bulk Import
 payscale.import.desc = Search for student(s) using their NetID, student number, or name, with each separate student on a new line.
-payscale.import.notFound = No students matching this query found. Try checking the capitalization since the search is CaSe SenSitIve.
+payscale.import.notFound = No students matching this query found. Try checking the capitalisation since the search is CaSe SenSitIve.
 payscale.import.search.people = NetID(s) / Student Number(s) / Name(s) ...
 payscale.import.search.people.label = Search for Students:
 payscale.import.all = Import All PayScales
@@ -390,6 +504,7 @@ payscale.import.conflict.lower = New PayScale Lower
 payscale.import.conflict.overwrite = Overwrite
 payscale.import.conflict.ignore = Ignore Conflicts & Close
 
+# Training Types
 training.type.name = Created Training Types
 training.type.name.label = Name of Training
 training.type.name.enter = Enter the name of the new training type...
@@ -397,16 +512,18 @@ training.type.create = Create a New Training Type
 training.type.edit = Edit Training Type
 training.type.remove = Delete Training Type
 training.type.remove.desc = Are you sure you would like to delete "{0}"? This will also delete all records of which students have already completed this training.
+# Training General
 training.name.long = TA Training
 training.name = Training
 training.datePassed = Date of Completion
+# Training Import
 training.import = Import TA Training
 training.import.file = Import TA Training from File
 training.import.file.info = Import bulk training via a file (CSV, XLSX). Each training approval should be a separate row, with the following columns in this order:
 training.import.file.info.columnOrder = Assistant Student Number, Training Type, Date of Completion (DD-MM-YYYY)
 training.import.file.successful = Successfully imported {0} training approval(s).
 training.import.desc = Search for student(s) using their NetID, student number, or name, with each separate student on a new line.
-training.import.notFound = No students matching this query found. Try checking the capitalization since the search is CaSe SenSitIve.
+training.import.notFound = No students matching this query found. Try checking the capitalisation since the search is CaSe SenSitIve.
 training.import.search.people = NetID(s) / Student Number(s) / Name(s) ...
 training.import.search.people.label = Search for Students
 training.import.all = Import Training for All
@@ -417,26 +534,30 @@ training.import.trainingType = Type of Training (Applied to All)
 training.import.trainingType.enter = Select the type of training for all students...
 training.import.success.title = Successfully Imported Training
 training.import.success.desc = Successfully imported training for student(s)!
+training.import.error = Error(s) at line
+training.import.warning = Warning(s) at line
 
+# Coordinator General
 coordinator = Coordinator
 coordinators = Coordinators
 coordinator.manage = Manage Programmes
 coordinator.program = Programme
 coordinator.search = Programme...
+coordinator.search.ariaLabel = Coordinator Program Search
 coordinator.empty = Sadly, you are not a coordinator for any programmes (yet?)
 coordinator.enterUsernames = Enter the NetIDs of the TA coordinators
-# Training
+# Coordinator Training
 coordinator.training = TA Training
 coordinator.training.empty = No TA trainings have been created. Try adding one!
-# Defaults
+# Coordinator Defaults
 coordinator.defaults = Programme Defaults
 coordinator.defaults.general = General
-# Defaults - General
+# Coordinator Defaults - General
 coordinator.defaults.coordinatorContractName = Coordinator Contract Name
 coordinator.defaults.coordinatorContractName.enter = Enter the coordinator name for contracts...
 coordinator.defaults.coordinatorContractEmail = Coordinator Contract Email
 coordinator.defaults.coordinatorContractEmail.enter = Enter the coordinator's email for contracts...
-# Defaults - Job Offers / Extra Work
+# Coordinator Defaults - Job Offers / Extra Work
 coordinator.defaults.contractName = Contract Name
 coordinator.defaults.contractBaan = Baan Code
 coordinator.defaults.contractStartDate = Contract Start Date
@@ -446,13 +567,16 @@ coordinator.defaults.declarationDeadline = Contract Request Deadline
 coordinator.defaults.description = Job Information
 coordinator.defaults.hiringMessage = Hiring Message
 coordinator.defaults.rejectMessage = Rejection Message
+coordinator.defaults.advertiseTo = Advertise to
 
+# Emails General
+email.applicationName = | TAM
 email.greeting = Dear {0},
 email.closing = Best Regards,
 email.closing.person = TAM
 email.notificationPreferences = To change your email notification preferences, please visit
 email.notificationPreferences.here = here.
-email.application.submitted.title = Application Successfully Submitted!
+# Emails Applications
 email.application.submitted.message = Thank you for applying for the {0} position in the {1} ({2}) course! We have received your application in good order.
 email.application.offered.title = Action Required: Offered {0} Position!
 email.application.offered.message = You have been offered the {0} position in the {1} ({2}) course! Please accept or reject the offer as soon as possible.
@@ -472,9 +596,11 @@ email.application.rejected.message = Thanks for applying as a {0} for {1} ({2}).
   \n \n Thank you for your interest, and we hope to see you again in the next application round! \
   \n \n Best regards,\n {3}.
 email.application.rejected.rejectionMessage = The following message was provided by the course staff:
+# Emails Declarations
 email.declaration.rejected.title = Contract Request Rejected
 email.declaration.rejected.message = Sadly, your contract request of {0} hours for {1} in the {2} ({3}) course was rejected. For more information, please contact the course staff.
 email.declaration.approved.title = Contract Request Approved
 email.declaration.approved.message = Your contract request of {0} hours for {1} in the {2} ({3}) course was approved! You will be able to declare these hours in FlexDelft soon. For more information, please contact the course staff.
 
-search.people = Search people
\ No newline at end of file
+# Searching
+search.people = Search people
diff --git a/src/main/resources/templates/application/all.html b/src/main/resources/templates/application/all.html
index 5fc1db6b78b0c5b5f11f3fd1b814b39b3b66315b..3dc6b953b2c6f8af2bbd6978c098317eb441040d 100644
--- a/src/main/resources/templates/application/all.html
+++ b/src/main/resources/templates/application/all.html
@@ -126,6 +126,7 @@
                     <button
                         type="submit"
                         class="button"
+                        th:aria-label="#{jobOffer.export.FlexDelft}"
                         th:text="#{jobOffer.export.FlexDelft}"></button>
                 </div>
             </form>
@@ -160,7 +161,9 @@
                         type="submit"
                         class="button"
                         data-style="outlined"
-                        th:text="#{jobOffer.export}"></button>
+                        th:aria-label="#{jobOffer.export}"
+                        th:href="@{/application/export}"
+                        th:text="#{jobOffer.export}"></a>
                 </div>
             </form>
 
diff --git a/src/main/resources/templates/application/view_many.html b/src/main/resources/templates/application/view_many.html
index 639c2c51b2feed72242be0933923621b076e1f86..06fce353e6ca31a921dd0363edaafb1ed1f150d0 100644
--- a/src/main/resources/templates/application/view_many.html
+++ b/src/main/resources/templates/application/view_many.html
@@ -46,12 +46,14 @@
                     id="offers-tab"
                     role="tab"
                     aria-selected="false"
+                    th:aria-label="#{jobOffer.many}"
                     th:href="@{/job-offer/open}"
                     th:text="#{jobOffer.many}"></a>
                 <a
                     id="applications-tab"
                     role="tab"
                     aria-selected="true"
+                    th:aria-label="#{application.my}"
                     th:href="@{/application/my}"
                     th:text="#{application.my}"></a>
             </div>
@@ -61,11 +63,14 @@
                     <input
                         name="q"
                         class="search_field"
-                        aria-label="Search course, status, or position"
+                        th:aria-label="#{application.search.ariaLabel}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{application.search}" />
-                    <button type="submit" class="fa-solid fa-search"></button>
+                    <button
+                        type="submit"
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"></button>
                 </form>
             </div>
 
@@ -99,12 +104,14 @@
                                 class="button p-min"
                                 data-style="outlined"
                                 th:data-dialog="|view-hiring-message-overlay-${app.jobOfferId}|"
+                                th:aria-label="#{jobOffer.hiringMessage.view}"
                                 th:text="#{jobOffer.hiringMessage.view}"></button>
                             <button
                                 th:if="${status == 'REJECTED_BY_TEACHER' && !(offer.rejectMessage == null || offer.rejectMessage.isEmpty())}"
                                 class="button p-min"
                                 data-style="outlined"
                                 th:data-dialog="|view-reject-message-overlay-${app.jobOfferId}|"
+                                th:aria-label="#{jobOffer.rejectMessage.view}"
                                 th:text="#{jobOffer.rejectMessage.view}"></button>
                             <form
                                 th:id="${'acceptForm' + app.jobOfferId}"
@@ -121,6 +128,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="accept"
+                                    th:aria-label="#{jobOffer.accept}"
                                     th:text="#{jobOffer.accept}"></button>
                             </form>
                             <div th:unless="${app.status.handled()}">
@@ -128,6 +136,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="error"
+                                    th:aria-label="#{|${(status == 'OFFERED') ? 'jobOffer.reject' : 'jobOffer.retract'}|}"
                                     th:text="#{|${(status == 'OFFERED') ? 'jobOffer.reject' : 'jobOffer.retract'}|}"
                                     th:data-dialog="|confirm-retract-my-app-page-${app.jobOfferId}-overlay|"></button>
                                 <div
diff --git a/src/main/resources/templates/application/view_response.html b/src/main/resources/templates/application/view_response.html
index a64da78b00497a05cb5f98a56c299d847d18a8af..f07b2e693b93ab59389472f9aeab5ac66d95dd05 100644
--- a/src/main/resources/templates/application/view_response.html
+++ b/src/main/resources/templates/application/view_response.html
@@ -41,6 +41,7 @@
                         type="button"
                         class="button p-less"
                         data-cancel
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"></button>
                 </div>
             </div>
diff --git a/src/main/resources/templates/container.html b/src/main/resources/templates/container.html
index 794772e4e0b4194db737d6ee88654b109d9db9cc..b7f7a88eade41c786060a7be0712ac4d6c428f77 100644
--- a/src/main/resources/templates/container.html
+++ b/src/main/resources/templates/container.html
@@ -30,7 +30,7 @@
             </header>
             <div class="content-wrapper">
                 <div class="content">
-                    <main layout:fragment="content">Content goes here.</main>
+                    <main layout:fragment="content" th:text="#{general.loadingPlaceholder}"></main>
                 </div>
             </div>
             <footer class="footer-wrapper">
diff --git a/src/main/resources/templates/coordinator/confirm_training_type_removal.html b/src/main/resources/templates/coordinator/confirm_training_type_removal.html
index a12595c9b120553808c3270729bec8fcf80c8655..f5b9d1b86111af8223ae542e77afecf201e1d8e1 100644
--- a/src/main/resources/templates/coordinator/confirm_training_type_removal.html
+++ b/src/main/resources/templates/coordinator/confirm_training_type_removal.html
@@ -44,12 +44,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"
                         th:form="|remove-training-type-${type.getId()}-form|"></button>
                 </div>
diff --git a/src/main/resources/templates/coordinator/create_training_type.html b/src/main/resources/templates/coordinator/create_training_type.html
index a35119508a2eacaabea3964a725a6971bd788c78..629a0bd4a506c7f6d504581f6c32507ef864abc5 100644
--- a/src/main/resources/templates/coordinator/create_training_type.html
+++ b/src/main/resources/templates/coordinator/create_training_type.html
@@ -53,11 +53,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{general.submit}"
                         th:text="#{general.submit}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/coordinator/defaults.html b/src/main/resources/templates/coordinator/defaults.html
index fd3ef4abcccd7be476aea4c88d61f97a89d607ca..3ff0f88122941ca0ef20158ee7e87d3114f75751 100644
--- a/src/main/resources/templates/coordinator/defaults.html
+++ b/src/main/resources/templates/coordinator/defaults.html
@@ -44,6 +44,7 @@
                     type="submit"
                     class="button"
                     th:form="patch-form"
+                    th:aria-label="#{general.saveChanges}"
                     th:text="#{general.saveChanges}"></button>
             </div>
 
@@ -241,7 +242,10 @@
                         class="textfield" />
                 </div>
                 <div class="flex vertical gap-5 align-start">
-                    <h3 id="advertise-to" class="font-400">Advertise to</h3>
+                    <h3
+                        id="advertise-to"
+                        class="font-400"
+                        th:text="#{coordinator.defaults.advertiseTo}"></h3>
                     <div
                         id="add-ad-div"
                         class="flex gap-3"
@@ -262,6 +266,7 @@
                             id="add-ad"
                             class="button p-less"
                             data-style="outlined"
+                            th:aria-label="#{general.add}"
                             th:text="#{general.add}"
                             disabled></button>
                     </div>
@@ -272,6 +277,7 @@
                                 class="button p-min"
                                 data-style="outlined"
                                 disabled
+                                th:aria-label="#{general.remove}"
                                 th:text="#{general.remove}"></button>
                         </li>
                         <li th:each="program : ${advertised}" class="flex align-center gap-5 p-3">
@@ -280,6 +286,7 @@
                                 class="button p-min"
                                 data-style="outlined"
                                 data-type="error"
+                                th:aria-label="#{general.remove}"
                                 th:text="#{general.remove}"
                                 th:data-remove-ad="${program.id}"></button>
                         </li>
diff --git a/src/main/resources/templates/coordinator/edit_training_type.html b/src/main/resources/templates/coordinator/edit_training_type.html
index aad753cd36199321019db503b23bd73ae2310f64..cef155ea0837d0b05322110c46a0de9e5301e7b9 100644
--- a/src/main/resources/templates/coordinator/edit_training_type.html
+++ b/src/main/resources/templates/coordinator/edit_training_type.html
@@ -57,11 +57,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{general.save}"
                         th:text="#{general.save}"
                         th:form="|edit-training-type-${type.getId()}-form|"></button>
                 </div>
diff --git a/src/main/resources/templates/coordinator/manage.html b/src/main/resources/templates/coordinator/manage.html
index f067ac72a934a27ed199d540c086f6aa35b83298..26a715df33809802f4e379fd23a7e7af4b6ea577 100644
--- a/src/main/resources/templates/coordinator/manage.html
+++ b/src/main/resources/templates/coordinator/manage.html
@@ -35,11 +35,14 @@
                 <form class="search">
                     <input
                         name="q"
-                        aria-label="Coordinator Program Search"
+                        th:aria-label="#{coordinator.search.ariaLabel}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{coordinator.search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        type="submit"
+                        th:aria-label="#{general.search}"></button>
                 </form>
             </div>
 
@@ -55,17 +58,20 @@
                             class="button grow"
                             data-style="outlined"
                             th:href="@{|/coordinator/training/${program.id}|}"
+                            th:aria-label="|#{general.manage} #{training.name.long}|"
                             th:text="|#{general.manage} #{training.name.long}|"></a>
                         <a
                             class="button grow"
                             data-style="outlined"
                             th:href="@{|/coordinator/defaults/${program.id}|}"
+                            th:aria-label="|#{general.manage} #{coordinator.defaults}|"
                             th:text="|#{general.manage} #{coordinator.defaults}|"></a>
                         <button
                             th:if="${@authorisationService.canEditCoordinatorsForProgram(program.id)}"
                             class="button grow"
                             data-style="outlined"
                             th:data-dialog="|edit-coordinators-${program.id}-overlay|"
+                            th:aria-label="|#{general.manage} #{coordinators}|"
                             th:text="|#{general.manage} #{coordinators}|"></button>
                     </div>
                     <th:block th:replace="~{coordinator/manage_coordinators :: overlay}"></th:block>
diff --git a/src/main/resources/templates/coordinator/manage_coordinators.html b/src/main/resources/templates/coordinator/manage_coordinators.html
index 4f929ceecf0d6ac8a8a147bb5ef7f6dfd89c320b..975d5dbeada1fd559061c459833941570c28c31a 100644
--- a/src/main/resources/templates/coordinator/manage_coordinators.html
+++ b/src/main/resources/templates/coordinator/manage_coordinators.html
@@ -48,9 +48,14 @@
                         class="button p-less"
                         data-type="error"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.edit}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:text="#{general.edit}"
+                        th:aria-label="#{general.edit}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/coordinator/training.html b/src/main/resources/templates/coordinator/training.html
index 313e904c8525f4f3c07adcd66d8f975f710139cc..dda835e9a7aff7d5904bce3ef0c2331be88a89a9 100644
--- a/src/main/resources/templates/coordinator/training.html
+++ b/src/main/resources/templates/coordinator/training.html
@@ -36,14 +36,14 @@
                     <div class="banner" data-type="error" th:each="err : ${importErrors}">
                         <span class="banner__icon fa-solid fa-circle-exclamation"></span>
                         <p
-                            th:text="|Error(s) at line ${err.key}: ${#strings.listJoin(err.value.![message], ',')}|"></p>
+                            th:text="|#{training.import.error} ${err.key}: ${#strings.listJoin(err.value.![message], ',')}|"></p>
                     </div>
                 </th:block>
                 <th:block th:if="${importWarnings != null && !importWarnings.isEmpty()}">
                     <div class="banner" data-type="warning" th:each="warning : ${importWarnings}">
                         <span class="banner__icon fa-solid fa-warning"></span>
                         <p
-                            th:text="|Warning(s) at line ${warning.key}: ${#strings.listJoin(warning.value.![message], ',')}|"></p>
+                            th:text="|#{training.import.warning} ${warning.key}: ${#strings.listJoin(warning.value.![message], ',')}|"></p>
                     </div>
                 </th:block>
                 <th:block th:if="${successfulImportSize != null && successfulImportSize > 0}">
@@ -58,12 +58,14 @@
             <div class="flex gap-3 | sm:grid sm:col-2">
                 <button
                     class="button"
+                    th:aria-label="#{training.import}"
                     th:text="#{training.import}"
                     data-dialog="import-training-overlay"></button>
 
                 <button
                     class="button"
-                    th:text="#{training.import.file}"
+                    th:aria-label="#{training.import.csv}"
+                    th:text="#{training.import.csv}"
                     data-dialog="import-training-csv-overlay"></button>
             </div>
 
@@ -74,6 +76,7 @@
                         <div class="flex justify-end">
                             <button
                                 class="button p-min"
+                                th:aria-label="#{training.create}"
                                 th:text="#{training.type.create}"
                                 data-dialog="create-training-type-overlay"></button>
                         </div>
@@ -87,12 +90,14 @@
                                 class="button p-min"
                                 data-style="outlined"
                                 th:data-dialog="|edit-training-type-${type.getId()}-overlay|"
+                                th:aria-label="#{general.edit}"
                                 th:text="#{general.edit}"></button>
                             <button
                                 class="button p-min"
                                 data-style="outlined"
                                 data-type="error"
                                 th:data-dialog="|remove-training-type-${type.getId()}-overlay|"
+                                th:aria-label="#{general.remove}"
                                 th:text="#{general.remove}"></button>
                         </div>
                     </td>
diff --git a/src/main/resources/templates/declaration/all.html b/src/main/resources/templates/declaration/all.html
index dec66e58dd152a2e9e5152981c7be5141fa8f6c7..7447756a75a34e00cc529b88568e34a5a0d2f1df 100644
--- a/src/main/resources/templates/declaration/all.html
+++ b/src/main/resources/templates/declaration/all.html
@@ -146,6 +146,7 @@
                             class="link"
                             target="_blank"
                             th:href="@{|/profile/${dec.getPerson().getId()}|}"
+                            th:aria-label="#{general.viewPerson.ariaLabel(${@personCacheManager.getOrThrow(dec.getPerson().getId()).displayName})}"
                             th:text="${@personCacheManager.getOrThrow(dec.getPerson().getId()).displayName}"></a>
                     </td>
                     <td
@@ -160,6 +161,7 @@
                             class="button p-min"
                             data-style="outlined"
                             th:data-dialog="|view-declaration-reason-overlay-${dec.id}|"
+                            th:aria-label="#{extraWork.reason.view}"
                             th:text="#{extraWork.reason.view}"></a>
                     </td>
                     <td th:text="#{|status.extraWork.${#strings.toLowerCase(dec.status)}|}"></td>
diff --git a/src/main/resources/templates/declaration/view_reason.html b/src/main/resources/templates/declaration/view_reason.html
index 6d9a0a7bb11d02358f21f76a114c0c56798bf552..be83e2478ef08bea48f39f6735e8117d5ee94fd7 100644
--- a/src/main/resources/templates/declaration/view_reason.html
+++ b/src/main/resources/templates/declaration/view_reason.html
@@ -37,6 +37,7 @@
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"
                         data-cancel></button>
                 </div>
diff --git a/src/main/resources/templates/edition/create.html b/src/main/resources/templates/edition/create.html
index 6cb1b4a432955e107d3ca22ac01e41ceb2f2344d..d89efea160f8107720ffa9c4e5be8a2cde277136 100644
--- a/src/main/resources/templates/edition/create.html
+++ b/src/main/resources/templates/edition/create.html
@@ -112,11 +112,13 @@
                         class="button p-less"
                         data-type="error"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{general.create}"
                         th:text="#{general.create}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/confirm_approve.html b/src/main/resources/templates/extra_work/confirm_approve.html
index 943aa9a17e18786ad6f570171956e700357085d7..28b6146f0df32ffa0dc86fd06d444e421f4159ba 100644
--- a/src/main/resources/templates/extra_work/confirm_approve.html
+++ b/src/main/resources/templates/extra_work/confirm_approve.html
@@ -37,9 +37,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.yes}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.yes}"
+                        th:text="#{general.yes}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/extra_work/confirm_approve_dec.html b/src/main/resources/templates/extra_work/confirm_approve_dec.html
index a41e3b814c95f3c0a547e037e7c40dbc922b5e05..af3901f563dba419714155cae1fa2e9d9dd98d92 100644
--- a/src/main/resources/templates/extra_work/confirm_approve_dec.html
+++ b/src/main/resources/templates/extra_work/confirm_approve_dec.html
@@ -47,12 +47,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="accept"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/confirm_close.html b/src/main/resources/templates/extra_work/confirm_close.html
index 95ad99aaa3ee5c6e4e90392366cf73a4580f320a..733c4f78916310db09b5d1ec39f284e4abe28a8f 100644
--- a/src/main/resources/templates/extra_work/confirm_close.html
+++ b/src/main/resources/templates/extra_work/confirm_close.html
@@ -37,12 +37,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/confirm_reject.html b/src/main/resources/templates/extra_work/confirm_reject.html
index 725524c4628d75eb5851ce4d9540478336126764..f3a988ea9c976de24c5cbe9e6a30c0f338609288 100644
--- a/src/main/resources/templates/extra_work/confirm_reject.html
+++ b/src/main/resources/templates/extra_work/confirm_reject.html
@@ -38,11 +38,13 @@
                         class="button p-less"
                         data-style="outlined"
                         data-cancel
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/confirm_reject_dec.html b/src/main/resources/templates/extra_work/confirm_reject_dec.html
index 36b818fbd313c4fd4892572ef47222050b6be835..250439b18f7d5acf2c3cc57979b83a90e1261d03 100644
--- a/src/main/resources/templates/extra_work/confirm_reject_dec.html
+++ b/src/main/resources/templates/extra_work/confirm_reject_dec.html
@@ -47,12 +47,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/confirm_retract_dec.html b/src/main/resources/templates/extra_work/confirm_retract_dec.html
index f080b482fc1a733c9bfb592ead6d8e066364ab42..30a6c9de5b9ec7e068a7851482a7f1905e5b9694 100644
--- a/src/main/resources/templates/extra_work/confirm_retract_dec.html
+++ b/src/main/resources/templates/extra_work/confirm_retract_dec.html
@@ -47,12 +47,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/extra_work/create.html b/src/main/resources/templates/extra_work/create.html
index c27f7e9c3355603dc85a982a6a3020a4b2553449..db63a819726438bada0a9545de25ff52ed9c1a94 100644
--- a/src/main/resources/templates/extra_work/create.html
+++ b/src/main/resources/templates/extra_work/create.html
@@ -125,9 +125,14 @@
                         class="button p-less"
                         data-type="error"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/extra_work/edit.html b/src/main/resources/templates/extra_work/edit.html
index 34fec6cd43681bfe68bff23d1446ccae7a6221a4..f07a36a5979cd106970cbe77da07eb0f1bf66a2c 100644
--- a/src/main/resources/templates/extra_work/edit.html
+++ b/src/main/resources/templates/extra_work/edit.html
@@ -105,9 +105,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/extra_work/import.html b/src/main/resources/templates/extra_work/import.html
index a15e54081349dc541db3b0b362025b8e1b983ad3..8b11cde0e294f9df655470899cca8d6d2bdea109 100644
--- a/src/main/resources/templates/extra_work/import.html
+++ b/src/main/resources/templates/extra_work/import.html
@@ -47,6 +47,7 @@
                     <a
                         id="templateDownload"
                         class="button"
+                        th:aria-label="#{general.download}"
                         th:text="#{general.download}"
                         th:href="@{/extra-work/import/template}"></a>
                 </div>
@@ -62,9 +63,14 @@
                         class="button p-less"
                         data-style="outlined"
                         data-type="error"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/extra_work/new_declaration.html b/src/main/resources/templates/extra_work/new_declaration.html
index 0c45cadfaffb6ac1adcc43a90c407ce35757352d..cfec993968a79611b5045aef916f5be62055bde5 100644
--- a/src/main/resources/templates/extra_work/new_declaration.html
+++ b/src/main/resources/templates/extra_work/new_declaration.html
@@ -96,11 +96,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.send}"
                         th:text="#{general.send}"
                         onclick="declarationSubmit()"></button>
                 </div>
diff --git a/src/main/resources/templates/extra_work/view_many.html b/src/main/resources/templates/extra_work/view_many.html
index a43578a73a7cb047cd9c924793543c017f59cf5e..8857b3a163cc4111af9f108f6d9cd48ef1d8b841 100644
--- a/src/main/resources/templates/extra_work/view_many.html
+++ b/src/main/resources/templates/extra_work/view_many.html
@@ -35,12 +35,14 @@
                     role="tab"
                     aria-controls="work"
                     th:aria-selected="${tab != 'declarations'}"
+                    th:aria-label="#{extraWork.many}"
                     th:text="#{extraWork.many}"></button>
                 <button
                     id="declarations-tab"
                     role="tab"
                     aria-controls="declarations"
                     th:aria-selected="${tab == 'declarations'}"
+                    th:aria-label="#{declaration.my}"
                     th:text="#{declaration.my}"></button>
             </div>
 
@@ -49,11 +51,14 @@
                     <input
                         name="q"
                         class="search_field"
-                        aria-label="Global search"
+                        th:aria-label="#{general.search}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{extraWork.search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"
+                        type="submit"></button>
                 </form>
 
                 <div class="flex vertical" th:unless="${editions.isEmpty()}">
@@ -68,6 +73,7 @@
                                             <button
                                                 class="fa-solid fa-chevron-down"
                                                 aria-expanded="true"
+                                                th:aria-label="#{general.expand}"
                                                 th:aria-controls="|edition-${edition.id}|"></button>
                                         </div>
                                     </td>
@@ -88,6 +94,7 @@
                                             <button
                                                 class="button p-min"
                                                 data-style="outlined"
+                                                th:aria-label="#{declaration.new}"
                                                 th:text="#{declaration.new}"
                                                 th:onclick="'newDeclarationOverlay(' + ${work.id} + ')'"></button>
                                         </div>
@@ -114,11 +121,14 @@
                     <input
                         name="q"
                         class="search_field"
-                        aria-label="search"
+                        th:aria-label="#{general.search}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{declaration.search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"
+                        type="submit"></button>
                 </form>
 
                 <div class="flex vertical">
@@ -145,6 +155,7 @@
                                     class="button p-min"
                                     data-style="outlined"
                                     th:data-dialog="|view-declaration-reason-overlay-${dec.id}|"
+                                    th:aria-label="#{extraWork.reason.view}"
                                     th:text="#{extraWork.reason.view}"></button>
                             </td>
                             <td
@@ -157,6 +168,7 @@
                                             class="button p-min"
                                             data-style="outlined"
                                             data-type="error"
+                                            th:aria-label="#{extraWork.retract}"
                                             th:text="#{extraWork.retract}"
                                             th:data-dialog="|confirm-retract-dec-${dec.id}-overlay|"></button>
                                         <div
diff --git a/src/main/resources/templates/extra_work/view_one.html b/src/main/resources/templates/extra_work/view_one.html
index 6559c28bdcaea9879241f3256feba8dfce80c3cb..1f9d27fc11dc061b0c784fc528700f4b9c937377 100644
--- a/src/main/resources/templates/extra_work/view_one.html
+++ b/src/main/resources/templates/extra_work/view_one.html
@@ -46,6 +46,7 @@
             <div class="flex gap-3 wrap">
                 <button
                     class="button"
+                    th:aria-label="#{extraWork.edit}"
                     th:text="#{extraWork.edit}"
                     data-style="outlined"
                     data-dialog="edit-extra-work-overlay"></button>
@@ -53,6 +54,7 @@
                     class="button"
                     data-style="outlined"
                     data-type="error"
+                    th:aria-label="#{extraWork.closeDeadline}"
                     th:text="#{extraWork.closeDeadline}"
                     data-dialog="confirm-close-overlay"></button>
             </div>
@@ -140,11 +142,14 @@
                     <form class="search">
                         <input
                             name="q"
-                            aria-label="Declaration search"
+                            th:aria-label="#{general.search}"
                             type="search"
                             th:value="${param.q}"
                             th:placeholder="#{declaration.manager.search}" />
-                        <button class="fa-solid fa-search" type="submit"></button>
+                        <button
+                            class="fa-solid fa-search"
+                            th:aria-label="#{general.search}"
+                            type="submit"></button>
                     </form>
                 </div>
 
@@ -152,12 +157,21 @@
                     <button
                         class="button"
                         data-style="outlined"
+                        th:aria-label="#{extraWork.approveAll}"
                         th:text="#{extraWork.approveAll}"
                         data-dialog="confirm-approve-overlay"></button>
+                    <a
+                        class="button"
+                        data-style="outlined"
+                        th:aria-label="#{extraWork.export}"
+                        th:text="#{extraWork.export}"
+                        target="_blank"
+                        th:href="@{|/extra-work/${work.id}/export|}"></a>
                     <button
                         class="button"
                         data-style="outlined"
                         data-type="error"
+                        th:aria-label="#{extraWork.rejectAll}"
                         th:text="#{extraWork.rejectAll}"
                         data-dialog="confirm-reject-overlay"></button>
                 </div>
@@ -206,6 +220,7 @@
                             class="link"
                             target="_blank"
                             th:href="@{|/profile/${dec.personId}|}"
+                            th:aria-label="|#{general.viewPerson.ariaLabel(${dec.person.displayName})}|"
                             th:text="${dec.person.displayName}"></a>
                     </td>
                     <td th:text="${dec.person.number}"></td>
@@ -215,6 +230,7 @@
                             class="button p-min"
                             data-style="outlined"
                             th:data-dialog="|view-declaration-reason-overlay-${dec.id}|"
+                            th:aria-label="#{extraWork.reason.view}"
                             th:text="#{extraWork.reason.view}"></button>
                     </td>
                     <td
@@ -226,6 +242,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="accept"
+                                    th:aria-label="#{extraWork.approve}"
                                     th:text="#{extraWork.approve}"
                                     th:data-dialog="|confirm-approve-dec-${dec.id}-overlay|"></button>
                                 <div
@@ -238,6 +255,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="error"
+                                    th:aria-label="#{extraWork.reject}"
                                     th:text="#{extraWork.reject}"
                                     th:data-dialog="|confirm-reject-dec-${dec.id}-overlay|"></button>
                                 <div th:replace="~{extra_work/confirm_reject_dec :: overlay}"></div>
diff --git a/src/main/resources/templates/footer.html b/src/main/resources/templates/footer.html
index 92a64771ab4f8450d9648dea42f1ac74451e5f1c..767ffde7238b4e7d3b3948d226d7f8486188aa01 100644
--- a/src/main/resources/templates/footer.html
+++ b/src/main/resources/templates/footer.html
@@ -26,10 +26,15 @@
             <img th:src="@{/img/tudelft_logo_dark.png}" height="24px" alt="TU Delft" />
 
             <div class="flex gap-7">
-                <a class="link" th:href="@{/privacy}" th:text="#{general.privacy_statement}"></a>
+                <a
+                    class="link"
+                    th:href="@{/privacy}"
+                    th:aria-label="#{general.privacy_statement}"
+                    th:text="#{general.privacy_statement}"></a>
                 <a
                     class="link"
                     th:href="#{general.help_url}"
+                    th:aria-label="#{general.help}"
                     th:text="#{general.help}"
                     target="_blank"></a>
             </div>
diff --git a/src/main/resources/templates/header.html b/src/main/resources/templates/header.html
index 23613bdb4cf9760f2c1fdf06a38d16c34f621de1..17733d4e8dbc8d0701b07922b687d1fbedcf8204 100644
--- a/src/main/resources/templates/header.html
+++ b/src/main/resources/templates/header.html
@@ -23,8 +23,8 @@
     xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
     <body>
         <div class="header" layout:fragment="header">
-            <a th:href="@{/}" class="header__title">
-                <span>TAM</span>
+            <a th:href="@{/}" class="header__title" th:aria-label="#{general.app_name}">
+                <span th:text="#{general.app_name}"></span>
             </a>
 
             <nav
@@ -33,32 +33,63 @@
                 aria-label="header">
                 <ul>
                     <li th:if="${@authorisationService.isCoordinatorOfAny()}">
-                        <a th:href="@{/coordinator/manage}" th:text="#{coordinator.manage}"></a>
+                        <a
+                            th:href="@{/coordinator/manage}"
+                            th:aria-label="#{coordinator.manage}"
+                            th:text="#{coordinator.manage}"></a>
                     </li>
                     <li th:if="${@authorisationService.canEditPayScale()}">
-                        <a th:href="@{/raise-request/all}" th:text="#{payscale.requests}"></a>
+                        <a
+                            th:href="@{/raise-request/all}"
+                            th:aria-label="#{payscale.requests}"
+                            th:text="#{payscale.requests}"></a>
                     </li>
                     <li th:if="${@authorisationService.isCoordinatorOfAny()}">
-                        <a th:href="@{/application/all}" th:text="#{application.all}"></a>
+                        <a
+                            th:href="@{/application/all}"
+                            th:aria-label="#{application.all}"
+                            th:text="#{application.all}"></a>
                     </li>
                     <li th:if="${@authorisationService.isCoordinatorOfAny()}">
-                        <a th:href="@{/declaration/all}" th:text="#{declaration.all}"></a>
+                        <a
+                            th:href="@{/declaration/all}"
+                            th:aria-label="#{declaration.all}"
+                            th:text="#{declaration.all}"></a>
                     </li>
                     <li th:if="${@authorisationService.isManagerOfAny()}">
-                        <a th:href="@{/job-offer/manage}" th:text="#{manager.portal}"></a>
+                        <a
+                            th:href="@{/job-offer/manage}"
+                            th:aria-label="#{manager.portal}"
+                            th:text="#{manager.portal}"></a>
                     </li>
                     <li th:if="${@authorisationService.isCoordinatorOfAny()}">
-                        <a th:href="@{/person/search}" th:text="#{search.people}"></a>
+                        <a
+                            th:href="@{/person/search}"
+                            th:aria-label="#{search.people}"
+                            th:text="#{search.people}"></a>
                     </li>
                     <th:block th:unless="${@authorisationService.isStaff()}">
-                        <li><a th:href="@{/job-offer/open}" th:text="#{jobOffer.many}"></a></li>
-                        <li><a th:href="@{/extra-work/open}" th:text="#{extraWork.many}"></a></li>
+                        <li>
+                            <a
+                                th:href="@{/job-offer/open}"
+                                th:aria-label="#{jobOffer.many}"
+                                th:text="#{jobOffer.many}"></a>
+                        </li>
+                        <li>
+                            <a
+                                th:href="@{/extra-work/open}"
+                                th:aria-label="#{extraWork.many}"
+                                th:text="#{extraWork.many}"></a>
+                        </li>
                     </th:block>
                 </ul>
             </nav>
 
             <div class="header__user" th:unless="${@authorisationService.isAuthenticated()}">
-                <a th:href="@{/login}">Log in</a>
+                <a
+                    th:href="@{/login}"
+                    th:text="#{general.login}"
+                    th:aria-label="#{general.login}"></a>
             </div>
 
             <div class="user-menu menu-wrapper" th:if="${@authorisationService.isAuthenticated()}">
@@ -67,9 +98,18 @@
                     <span class="fa-solid fa-chevron-down"></span>
                 </button>
                 <ul id="user-menu" class="menu" aria-expanded="false" role="list">
-                    <li><a th:href="@{/profile}">Profile</a></li>
                     <li>
-                        <form th:action="@{/logout}" method="post"><button>Log out</button></form>
+                        <a
+                            th:href="@{/profile}"
+                            th:text="#{profile.short}"
+                            th:aria-label="#{profile.short}"></a>
+                    </li>
+                    <li>
+                        <form th:action="@{/logout}" method="post">
+                            <button
+                                th:text="#{general.logout}"
+                                th:aria-label="#{general.logout}"></button>
+                        </form>
                     </li>
                 </ul>
             </div>
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index d417c92ea81fcb48eb508552f69cd95b62dd4538..af2dd4a082fe0bdba346c251ec3a6ec2e3ed6715 100644
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -29,55 +29,29 @@
 
     <body>
         <main layout:fragment="content">
-            <h1 class="font-800">Teaching Assistant Management</h1>
+            <h1 class="font-800" th:text="#{general.app_name.long}"></h1>
 
-            <h2 class="font-500 mb-5">
-                Welcome to TAM! To log in, click the button in the top right.
-            </h2>
+            <h2 class="font-500 mb-5" th:text="#{homepage.welcome}"></h2>
 
             <div class="grid col-2 md:col-1">
                 <div>
-                    <h2 class="font-400 fw-500">Students</h2>
-                    <p class="mb-5">
-                        As a student, you can sign up to become a teaching assistant and indicate
-                        your availability and willingness to assist courses. When your eligibility
-                        is approved you can be selected to assist a course.
-                    </p>
-                    <h2 class="font-400 fw-500">Course Staff</h2>
-                    <p>
-                        As a lecturer, you can register your course and indicate the need for
-                        teaching assistants. An overview of interested students is provided, using
-                        which you can send job offers to the selected candidates.
-                    </p>
+                    <h2 class="font-400 fw-500" th:text="#{homepage.students}"></h2>
+                    <p class="mb-5" th:text="#{homepage.students.message}"></p>
+                    <h2 class="font-400 fw-500" th:text="#{homepage.teachers}"></h2>
+                    <p th:text="#{homepage.teachers.message}"></p>
                 </div>
                 <div>
-                    <h2 class="font-400 fw-500">Why become a TA?</h2>
+                    <h2 class="font-400 fw-500" th:text="#{homepage.why}"></h2>
                     <ol class="list">
-                        <li>
-                            You meet other excellent students from other years, studies, and
-                            specialties.
-                        </li>
-                        <li>Working as a TA shows future employers that:</li>
+                        <li th:text="#{homepage.why.one}"></li>
+                        <li th:text="#{homepage.why.two}"></li>
                         <ul class="list">
-                            <li>
-                                You have an even better understanding of the material, allowing you
-                                to explain material to others.
-                            </li>
-                            <li>You are comfortable communicating with people</li>
+                            <li th:text="#{homepage.why.two.one}"></li>
+                            <li th:text="#{homepage.why.two.two}"></li>
                         </ul>
-                        <li>
-                            You get the opportunity to network with staff from TU Delft, helping you
-                            find future projects (like a bachelor or master thesis, PhD, etc.).
-                        </li>
-                        <li>
-                            You have a flexible work schedule that you can adapt to fit with your
-                            own study program.
-                        </li>
-                        <li>
-                            You receive an hourly financial compensation for your work (see
-                            <a class="link" href="https://flexdelft.nl">flexdelft.nl</a>
-                            for more information).
-                        </li>
+                        <li th:text="#{homepage.why.three}"></li>
+                        <li th:text="#{homepage.why.four}"></li>
+                        <li th:text="#{homepage.why.five}"></li>
                     </ol>
                 </div>
             </div>
diff --git a/src/main/resources/templates/job_offer/add_offer.html b/src/main/resources/templates/job_offer/add_offer.html
index cfabf4a5f722023193691dd87e58d6e5844b7d3d..6d18c0d42a2ceb3a5db290a9150c18f7da44b5a2 100644
--- a/src/main/resources/templates/job_offer/add_offer.html
+++ b/src/main/resources/templates/job_offer/add_offer.html
@@ -70,6 +70,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-style="outlined"
+                                    th:aria-label="#{jobOffer.offerToAll}"
                                     th:text="#{jobOffer.offerToAll}"
                                     data-dialog="confirm-offer-all-app-overlay"></button>
                             </div>
@@ -85,6 +86,7 @@
                                 class="link"
                                 target="_blank"
                                 th:href="@{|/profile/${student.getId()}|}"
+                                th:aria-label="|#{general.viewPerson.ariaLabel(${student.getDisplayName()})}|"
                                 th:text="${student.getDisplayName()}"></a>
                         </td>
                         <td th:text="${student.getUsername()}"></td>
@@ -93,6 +95,7 @@
                                 <button
                                     type="submit"
                                     class="button p-min"
+                                    th:aria-label="#{jobOffer.offer}"
                                     th:text="#{jobOffer.offer}"
                                     th:data-dialog="|confirm-offer-app-${student.id}-overlay|"></button>
                             </div>
@@ -114,6 +117,7 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
@@ -121,6 +125,7 @@
                         type="submit"
                         th:data-style="${specificOfferCandidates == null ? null : 'outlined'}"
                         class="button p-less"
+                        th:aria-label="#{general.search}"
                         th:text="#{general.search}"></button>
                 </div>
             </div>
diff --git a/src/main/resources/templates/job_offer/apply.html b/src/main/resources/templates/job_offer/apply.html
index 0991634ecb1bdc1cdf9c26fc3e77b3b25c66a0d4..e3a12b6f99241046acce1106c6d9885aa8b3c1ab 100644
--- a/src/main/resources/templates/job_offer/apply.html
+++ b/src/main/resources/templates/job_offer/apply.html
@@ -72,12 +72,14 @@
                         type="button"
                         class="button p-less"
                         th:data-style="${app.exists()} ? 'filled' : 'outlined'"
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"
                         data-cancel></button>
                     <button
                         th:unless="${app.exists()}"
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{jobOffer.apply}"
                         th:text="#{jobOffer.apply}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_close.html b/src/main/resources/templates/job_offer/confirm_close.html
index a454d4e711e09785c66b497143cb78ce6aab8218..fb51008de9a4fe4aba518934e378403d10f32bbc 100644
--- a/src/main/resources/templates/job_offer/confirm_close.html
+++ b/src/main/resources/templates/job_offer/confirm_close.html
@@ -37,12 +37,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_demote_app.html b/src/main/resources/templates/job_offer/confirm_demote_app.html
index 443128bb9a0f766791ee1a086ee7a4ed6d5abf1a..e53d585c27d798dde12590e092e9c60866da8fbc 100644
--- a/src/main/resources/templates/job_offer/confirm_demote_app.html
+++ b/src/main/resources/templates/job_offer/confirm_demote_app.html
@@ -44,12 +44,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_offer_all_app.html b/src/main/resources/templates/job_offer/confirm_offer_all_app.html
index 59f879bdc9241140c4eefa9f434294167f813c8a..f1d55c068460b3e04d04e2af4e57b5e739feea09 100644
--- a/src/main/resources/templates/job_offer/confirm_offer_all_app.html
+++ b/src/main/resources/templates/job_offer/confirm_offer_all_app.html
@@ -54,9 +54,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.yes}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.yes}"
+                        th:text="#{general.yes}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/confirm_offer_app.html b/src/main/resources/templates/job_offer/confirm_offer_app.html
index d5ee031144a230bbe600a7042388aed1e30c5e2e..b7898966e4641eb59dd7acccefe832fdae8c8479 100644
--- a/src/main/resources/templates/job_offer/confirm_offer_app.html
+++ b/src/main/resources/templates/job_offer/confirm_offer_app.html
@@ -44,9 +44,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.yes}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.yes}"
+                        th:text="#{general.yes}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/confirm_promote_app.html b/src/main/resources/templates/job_offer/confirm_promote_app.html
index e7e546edbad831805580da2846c306cc980a2489..7af6fd81a8d89bc3ff4ea70fd8ea8683a28cbb45 100644
--- a/src/main/resources/templates/job_offer/confirm_promote_app.html
+++ b/src/main/resources/templates/job_offer/confirm_promote_app.html
@@ -44,9 +44,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.yes}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.yes}"
+                        th:text="#{general.yes}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/confirm_reject.html b/src/main/resources/templates/job_offer/confirm_reject.html
index b19428f1f888b5bcb6c87188547cf090060c8e29..b26696eb7fd837e411f671dcbb7cae4955b113b3 100644
--- a/src/main/resources/templates/job_offer/confirm_reject.html
+++ b/src/main/resources/templates/job_offer/confirm_reject.html
@@ -42,12 +42,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_reject_app.html b/src/main/resources/templates/job_offer/confirm_reject_app.html
index c6db84466dbc45b204dda2be2a4d8ee7b1929604..65522cca7118e90da5e99b62ab26d69b6955ae3f 100644
--- a/src/main/resources/templates/job_offer/confirm_reject_app.html
+++ b/src/main/resources/templates/job_offer/confirm_reject_app.html
@@ -49,12 +49,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_reject_selected.html b/src/main/resources/templates/job_offer/confirm_reject_selected.html
index 2fc083b8d3a47d91da771697007ed5e8b9166449..c3a53eb736b8314b3b4937d5b4bad88c27c05133 100644
--- a/src/main/resources/templates/job_offer/confirm_reject_selected.html
+++ b/src/main/resources/templates/job_offer/confirm_reject_selected.html
@@ -59,9 +59,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.yes}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.yes}"
+                        th:text="#{general.yes}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/confirm_retract_app.html b/src/main/resources/templates/job_offer/confirm_retract_app.html
index c52f0f3aca731a20eeb78fbde71454623be99250..e3d245a1f66978e2939631d17ea271d789d4db98 100644
--- a/src/main/resources/templates/job_offer/confirm_retract_app.html
+++ b/src/main/resources/templates/job_offer/confirm_retract_app.html
@@ -53,12 +53,14 @@
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/confirm_retract_my_app_page.html b/src/main/resources/templates/job_offer/confirm_retract_my_app_page.html
index 452e93bacc985c6db1a15accce44ba87acb704ca..03c6f5107feae156b344a22ac45517a76f7b31fa 100644
--- a/src/main/resources/templates/job_offer/confirm_retract_my_app_page.html
+++ b/src/main/resources/templates/job_offer/confirm_retract_my_app_page.html
@@ -50,12 +50,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{general.yes}"
                         th:text="#{general.yes}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/create.html b/src/main/resources/templates/job_offer/create.html
index f5b73e28fefc266e4c9bb5973732f1981503c3a3..6fd4897f197a845494960a1eba3b5a929c379e83 100644
--- a/src/main/resources/templates/job_offer/create.html
+++ b/src/main/resources/templates/job_offer/create.html
@@ -162,9 +162,14 @@
                         class="button p-less"
                         data-type="error"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/edit.html b/src/main/resources/templates/job_offer/edit.html
index b602af2e9bd938f321a76667f531ed5e2211ae72..d18cb9f0a85d92a0fa94bf4acbe917b7ad19f458 100644
--- a/src/main/resources/templates/job_offer/edit.html
+++ b/src/main/resources/templates/job_offer/edit.html
@@ -131,7 +131,7 @@
                     </div>
                     <input
                         id="deadline"
-                        aria-label="Deadline for applying"
+                        th:aria-label="#{jobOffer.deadline}"
                         th:name="deadline"
                         th:placeholder="#{jobOffer.date.enter}"
                         th:value="${offer.deadline}"
@@ -145,9 +145,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/import.html b/src/main/resources/templates/job_offer/import.html
index 7c7b4acab1baacff15ecc7085de409036661f8aa..4036b026fdfec16be2d90e936e545d62e3385d96 100644
--- a/src/main/resources/templates/job_offer/import.html
+++ b/src/main/resources/templates/job_offer/import.html
@@ -52,6 +52,7 @@
                     <a
                         id="templateDownload"
                         class="button"
+                        th:aria-label="#{general.download}"
                         th:text="#{general.download}"
                         th:href="@{/job-offer/import/template}"></a>
                 </div>
@@ -67,9 +68,14 @@
                         class="button p-less"
                         data-style="outlined"
                         data-type="error"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/job_offer/manage.html b/src/main/resources/templates/job_offer/manage.html
index f08740c6715f19a26a8cc3a3b2f6fe0d66d4352c..82ba5cbffcd484f31868c7ba8476cb3a2ae40da9 100644
--- a/src/main/resources/templates/job_offer/manage.html
+++ b/src/main/resources/templates/job_offer/manage.html
@@ -34,14 +34,14 @@
                     <div class="banner" data-type="error" th:each="err : ${importErrors}">
                         <span class="banner__icon fa-solid fa-circle-exclamation"></span>
                         <p
-                            th:text="|Error(s) at line ${err.key}: ${#strings.listJoin(err.value.![message], ',')}|"></p>
+                            th:text="|#{training.import.error} ${err.key}: ${#strings.listJoin(err.value.![message], ',')}|"></p>
                     </div>
                 </th:block>
                 <th:block th:if="${importWarnings != null && !importWarnings.isEmpty()}">
                     <div class="banner" data-type="warning" th:each="warning : ${importWarnings}">
                         <span class="banner__icon fa-solid fa-warning"></span>
                         <p
-                            th:text="|Warning(s) at line ${warning.key}: ${#strings.listJoin(warning.value.![message], ',')}|"></p>
+                            th:text="|#{training.import.warning} ${warning.key}: ${#strings.listJoin(warning.value.![message], ',')}|"></p>
                     </div>
                 </th:block>
                 <th:block th:if="${successfulImportSize != null && successfulImportSize > 0}">
@@ -58,11 +58,14 @@
                 <form class="search">
                     <input
                         name="q"
-                        aria-label="Search for job offers"
+                        th:aria-label="#{general.search}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{jobOffer.search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"
+                        type="submit"></button>
                 </form>
             </div>
 
@@ -75,18 +78,21 @@
                         data-style="outlined"
                         th:if="${@authorisationService.isManagerOfAny()}"
                         data-dialog="new-edition-overlay"
+                        th:aria-label="#{edition.create}"
                         th:text="#{edition.create}"></button>
                     <button
                         class="button"
                         data-style="outlined"
                         th:if="${@authorisationService.isCoordinatorOfAny()}"
                         data-dialog="import-job-offer-overlay"
+                        th:aria-label="#{jobOffer.import}"
                         th:text="#{jobOffer.import}"></button>
                     <button
                         class="button"
                         data-style="outlined"
                         th:if="${@authorisationService.isCoordinatorOfAny()}"
                         data-dialog="import-extra-work-overlay"
+                        th:aria-label="#{extraWork.import}"
                         th:text="#{extraWork.import}"></button>
                 </div>
 
@@ -107,11 +113,13 @@
                     role="tab"
                     th:aria-selected="${#request.requestURI.matches('.*/manage[^/]*')}"
                     th:href="@{/job-offer/manage}"
+                    th:aria-label="#{manager.managed}"
                     th:text="#{manager.managed}"></a>
                 <a
                     role="tab"
                     th:aria-selected="${#request.requestURI.matches('.*/manage/all.*')}"
                     th:href="@{/job-offer/manage/all}"
+                    th:aria-label="#{manager.coordinator}"
                     th:text="#{manager.coordinator}"></a>
             </div>
 
@@ -137,6 +145,7 @@
                                 data-style="outlined"
                                 th:onclick="'newOfferOverlay(\'job-offer\', '+${edition.id}+')'"
                                 data-dialog="new-job-offer-overlay"
+                                th:aria-label="#{general.add}"
                                 th:text="#{general.add}"></button>
                         </div>
 
@@ -147,6 +156,7 @@
                                 <a
                                     class="link"
                                     th:href="@{|/job-offer/${offer.id}|}"
+                                    th:aria-label="${offer.name}"
                                     th:text="${offer.name}"></a>
                                 <div>
                                     <span
@@ -172,6 +182,7 @@
                                 data-style="outlined"
                                 th:onclick="'newOfferOverlay(\'extra-work\', '+${edition.id}+')'"
                                 data-dialog="new-extra-work-overlay"
+                                th:aria-label="#{general.add}"
                                 th:text="#{general.add}"></button>
                         </div>
 
@@ -182,6 +193,7 @@
                                 <a
                                     class="link"
                                     th:href="@{|/extra-work/${work.id}|}"
+                                    th:aria-label="${work.name}"
                                     th:text="${work.name}"></a>
                                 <div
                                     th:if="${@declarationService.getNumberOfUnhandledHours(work.id)} > 0"
@@ -222,12 +234,14 @@
                                         data-style="outlined"
                                         data-dialog="new-extra-work-overlay"
                                         th:onclick="'newOfferOverlay(\'extra-work\', '+${edition.id}+')'"
+                                        th:aria-label="|#{general.add} #{extraWork.many}|"
                                         th:text="|#{general.add} #{extraWork.many}|"></button>
                                     <button
                                         class="button p-min"
                                         data-style="outlined"
                                         data-dialog="new-job-offer-overlay"
                                         th:onclick="'newOfferOverlay(\'job-offer\', '+${edition.id}+')'"
+                                        th:aria-label="|#{general.add} #{jobOffer}|"
                                         th:text="|#{general.add} #{jobOffer}|"></button>
                                 </div>
                             </td>
@@ -266,6 +280,7 @@
                                 <a
                                     class="link"
                                     th:href="@{|/job-offer/${offer.id}|}"
+                                    th:aria-label="|#{jobOffer}: ${offer.name}|"
                                     th:text="|#{jobOffer}: ${offer.name}|"></a>
                             </td>
                         </tr>
@@ -289,12 +304,13 @@
                                 <a
                                     class="link"
                                     th:href="@{|/extra-work/${work.id}|}"
+                                    th:aria-label="|#{extraWork.many}: ${work.name}|"
                                     th:text="|#{extraWork.many}: ${work.name}|"></a>
                             </td>
                         </tr>
 
                         <tr th:if="${edition.offers.isEmpty() && edition.work.isEmpty()}">
-                            <td colspan="4">No job offers or extra work created.</td>
+                            <td colspan="4" th:text="#{edition.empty}"></td>
                         </tr>
                     </tbody>
                     <div th:replace="~{job_offer/default_container :: defaultContainer}"></div>
diff --git a/src/main/resources/templates/job_offer/missing_editions.html b/src/main/resources/templates/job_offer/missing_editions.html
index ff5b61d952379cf216b83b4cb374ec2adabfcee9..62a0f53d4b704ba61f2c2700033e01b5b75786ac 100644
--- a/src/main/resources/templates/job_offer/missing_editions.html
+++ b/src/main/resources/templates/job_offer/missing_editions.html
@@ -42,7 +42,10 @@
                     <thead class="table__header">
                         <tr>
                             <th class="fit-content">
-                                <input aria-label="Select all" id="select-all" type="checkbox" />
+                                <input
+                                    th:aria-label="#{general.selectAll}"
+                                    id="select-all"
+                                    type="checkbox" />
                             </th>
                             <th th:text="#{general.name}"></th>
                             <th th:text="#{edition.course}"></th>
@@ -57,7 +60,7 @@
                                 th:with="offers = ${errs.![#this.jobOffer()]}, courseCode = ${errs[0].courseCode()}">
                                 <td>
                                     <input
-                                        aria-label="Include job offer"
+                                        th:aria-label="#{jobOffer.includeJobOffer}"
                                         name="include"
                                         th:value="${iter.index}"
                                         type="checkbox" />
@@ -115,11 +118,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{general.create}"
                         th:text="#{general.create}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/job_offer/view_hiring_message.html b/src/main/resources/templates/job_offer/view_hiring_message.html
index 215eea01f113ff61059e8ddd8c8d376a52de0fbb..28bc764c586e88ee40c44eb4355d60cdcaed78e8 100644
--- a/src/main/resources/templates/job_offer/view_hiring_message.html
+++ b/src/main/resources/templates/job_offer/view_hiring_message.html
@@ -38,6 +38,7 @@
                         type="button"
                         class="button p-less"
                         data-cancel
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"></button>
                 </div>
             </div>
diff --git a/src/main/resources/templates/job_offer/view_many.html b/src/main/resources/templates/job_offer/view_many.html
index 0f47c13795fb94b2d9f87d0ef43ad9ae87c90cab..fc0f061612da73a831f26c188abf8c3d3b463ab9 100644
--- a/src/main/resources/templates/job_offer/view_many.html
+++ b/src/main/resources/templates/job_offer/view_many.html
@@ -36,12 +36,14 @@
                     role="tab"
                     aria-selected="true"
                     th:href="@{/job-offer/open}"
+                    th:aria-label="#{jobOffer.many}"
                     th:text="#{jobOffer.many}"></a>
                 <a
                     id="applications-tab"
                     role="tab"
                     aria-selected="false"
                     th:href="@{/application/my}"
+                    th:aria-label="#{application.my}"
                     th:text="#{application.my}"></a>
             </div>
 
@@ -68,11 +70,14 @@
                     <input
                         name="q"
                         id="job-offer-search"
-                        aria-label="Search job offers"
+                        th:aria-label="#{general.search}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{jobOffer.search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"
+                        type="submit"></button>
                 </form>
             </div>
 
@@ -165,6 +170,7 @@
                                         class="button p-min"
                                         data-style="outlined"
                                         th:data-dialog="|apply-${offer.id}-overlay|"
+                                        th:aria-label="#{jobOffer.viewDetails}"
                                         th:text="#{jobOffer.viewDetails}"></button>
                                     <th:block th:replace="~{job_offer/apply :: overlay}"></th:block>
 
@@ -174,12 +180,14 @@
                                             class="button p-min"
                                             data-style="outlined"
                                             th:data-dialog="|view-hiring-message-overlay-${offer.id}|"
+                                            th:aria-label="#{jobOffer.hiringMessage.view}"
                                             th:text="#{jobOffer.hiringMessage.view}"></button>
                                         <button
                                             th:if="${app.exists() && status == 'REJECTED_BY_TEACHER' && !(offer.rejectMessage == null || offer.rejectMessage.isEmpty())}"
                                             class="button p-min"
                                             data-style="outlined"
                                             th:data-dialog="|view-reject-message-overlay-${offer.id}|"
+                                            th:aria-label="#{jobOffer.rejectMessage.view}"
                                             th:text="#{jobOffer.rejectMessage.view}"></button>
                                         <form
                                             th:if="${status == 'OFFERED'}"
@@ -202,7 +210,9 @@
                                                 class="button p-min"
                                                 data-type="accept">
                                                 <span class="fa-solid fa-check"></span>
-                                                <span th:text="#{jobOffer.accept}"></span>
+                                                <span
+                                                    th:text="#{jobOffer.accept}"
+                                                    th:aria-label="#{jobOffer.accept}"></span>
                                             </button>
                                             <button
                                                 th:data-dialog="|confirm-retract-app-${offer.id}|"
@@ -212,9 +222,11 @@
                                                 <span class="fa-solid fa-xmark"></span>
                                                 <span
                                                     th:if="${status == 'OFFERED'}"
+                                                    th:aria-label="#{jobOffer.reject}"
                                                     th:text="#{jobOffer.reject}"></span>
                                                 <span
                                                     th:unless="${status == 'OFFERED'}"
+                                                    th:aria-label="#{jobOffer.retract}"
                                                     th:text="#{jobOffer.retract}"></span>
                                             </button>
                                         </form>
@@ -225,7 +237,9 @@
                                                 data-style="outlined"
                                                 data-type="error">
                                                 <span class="fa-solid fa-xmark"></span>
-                                                <span th:text="#{jobOffer.retract}"></span>
+                                                <span
+                                                    th:aria-label="#{jobOffer.retract}"
+                                                    th:text="#{jobOffer.retract}"></span>
                                             </button>
                                         </div>
                                         <th:block th:unless="${app.status.handled()}">
diff --git a/src/main/resources/templates/job_offer/view_one.html b/src/main/resources/templates/job_offer/view_one.html
index 1dcf9754e376637d973824dea2e8e4624a4bfa3a..107ae629e5c062a26d159dba7c6bba0618724caa 100644
--- a/src/main/resources/templates/job_offer/view_one.html
+++ b/src/main/resources/templates/job_offer/view_one.html
@@ -49,12 +49,14 @@
                 <button
                     class="button"
                     data-style="outlined"
+                    th:aria-label="#{jobOffer.edit}"
                     th:text="#{jobOffer.edit}"
                     data-dialog="edit-job-offer-overlay"></button>
                 <button
                     class="button"
                     data-style="outlined"
                     data-type="error"
+                    th:aria-label="#{jobOffer.closeDeadline}"
                     th:text="#{jobOffer.closeDeadline}"
                     data-dialog="confirm-close-overlay"></button>
                 <form
@@ -66,6 +68,7 @@
                     class="button"
                     data-style="outlined"
                     th:form="toggle-hidden"
+                    th:aria-label="${offer.hidden} ? #{jobOffer.show} : #{jobOffer.hide}"
                     th:text="${offer.hidden} ? #{jobOffer.show} : #{jobOffer.hide}"></button>
             </div>
 
@@ -131,29 +134,29 @@
             </div>
 
             <div class="surface">
-                <h2 class="underlined font-500 mb-5">Messages</h2>
+                <h2 class="underlined font-500 mb-5" th:text="#{jobOffer.messages}"></h2>
                 <div class="tabs mb-3" role="tablist">
                     <button
                         role="tab"
                         id="job-information-tab"
                         aria-selected="true"
-                        aria-controls="job-information">
-                        Job information
-                    </button>
+                        th:aria-label="#{jobOffer.information}"
+                        th:text="#{jobOffer.information}"
+                        aria-controls="job-information"></button>
                     <button
                         role="tab"
                         id="hiring-message-tab"
                         aria-selected="false"
-                        aria-controls="hiring-message">
-                        Hiring message
-                    </button>
+                        th:aria-label="#{jobOffer.hiringMessage}"
+                        th:text="#{jobOffer.hiringMessage}"
+                        aria-controls="hiring-message"></button>
                     <button
                         role="tab"
                         id="rejection-message-tab"
                         aria-selected="false"
-                        aria-controls="rejection-message">
-                        Rejection message
-                    </button>
+                        th:aria-label="#{jobOffer.rejectMessage}"
+                        th:text="#{jobOffer.rejectMessage}"
+                        aria-controls="rejection-message"></button>
                 </div>
 
                 <div id="job-information" aria-labelledby="job-information-tab">
@@ -166,9 +169,12 @@
                             th:unless="${offer.description}"
                             th:text="#{jobOffer.description.none}"></p>
                         <div>
-                            <button id="edit-information-button" class="button">
+                            <button
+                                id="edit-information-button"
+                                class="button"
+                                th:aria-label="#{general.edit}">
                                 <span class="fa-solid fa-pencil"></span>
-                                <span>Edit</span>
+                                <span th:text="#{general.edit}"></span>
                             </button>
                         </div>
                     </div>
@@ -180,11 +186,11 @@
                         <textarea
                             class="textfield"
                             data-style="variant"
-                            placeholder="Enter job information"
+                            th:placeholder="#{jobOffer.description.enter}"
                             th:text="${offer.description}"
                             rows="4"
                             name="description"
-                            aria-label="Job information"
+                            th:aria-label="${offer.description}"
                             id="description"
                             required></textarea>
                         <div>
@@ -202,13 +208,14 @@
                                 id="cancel-edit-information-button"
                                 type="button"
                                 class="button"
+                                th:aria-label="#{general.cancel}"
                                 data-style="outlined">
                                 <span class="fa-solid fa-xmark"></span>
-                                <span>Cancel</span>
+                                <span th:text="#{general.cancel}"></span>
                             </button>
-                            <button type="submit" class="button">
+                            <button type="submit" class="button" th:aria-label="#{general.save}">
                                 <span class="fa-solid fa-save"></span>
-                                <span>Save</span>
+                                <span th:text="#{general.save}"></span>
                             </button>
                         </div>
                     </form>
@@ -306,13 +313,13 @@
                             class="textfield"
                             data-style="variant"
                             name="hiringMessage"
-                            placeholder="Enter hiring message"
+                            th:placeholder="#{jobOffer.hiringMessage.enter}"
                             th:text="${offer.hiringMessage}"
                             rows="4"></textarea>
                         <div>
-                            <button class="button">
+                            <button class="button" th:aria-label="#{general.save}">
                                 <span class="fa-solid fa-save"></span>
-                                <span>Save</span>
+                                <span th:text="#{general.save}"></span>
                             </button>
                         </div>
                     </form>
@@ -327,13 +334,13 @@
                             class="textfield"
                             data-style="variant"
                             name="rejectMessage"
-                            placeholder="Enter rejection message"
+                            th:placeholder="#{jobOffer.rejectMessage.enter}"
                             th:text="${offer.rejectMessage}"
                             rows="4"></textarea>
                         <div>
-                            <button class="button">
+                            <button class="button" th:aria-label="#{general.save}">
                                 <span class="fa-solid fa-save"></span>
-                                <span>Save</span>
+                                <span th:text="#{general.save}"></span>
                             </button>
                         </div>
                     </form>
@@ -363,11 +370,14 @@
                         <input
                             name="q"
                             class="search_field"
-                            aria-label="Application search"
+                            th:aria-label="#{general.search}"
                             type="search"
                             th:value="${param.q}"
                             th:placeholder="#{application.manager.search}" />
-                        <button class="fa-solid fa-search" type="submit"></button>
+                        <button
+                            class="fa-solid fa-search"
+                            th:aria-label="#{general.search}"
+                            type="submit"></button>
                     </form>
                 </div>
 
@@ -375,17 +385,27 @@
                     <button
                         class="button"
                         data-style="outlined"
+                        th:aria-label="#{jobOffer.selectAll}"
                         th:text="#{jobOffer.selectAll}"
                         id="select-all-button"></button>
+                    <a
+                        class="button"
+                        data-style="outlined"
+                        th:aria-label="#{jobOffer.export}"
+                        th:text="#{jobOffer.export}"
+                        target="_blank"
+                        th:href="@{|/job-offer/${offer.id}/export|}"></a>
                     <button
                         class="button"
                         data-style="outlined"
+                        th:aria-label="#{jobOffer.addOffer}"
                         th:text="#{jobOffer.addOffer}"
                         data-dialog="add-offer-overlay"></button>
                     <button
                         class="button"
                         data-style="outlined"
                         data-type="error"
+                        th:aria-label="#{jobOffer.rejectAll}"
                         th:text="#{jobOffer.rejectAll}"
                         data-dialog="confirm-reject-overlay"></button>
                 </div>
@@ -478,6 +498,7 @@
                                 type="submit"
                                 class="button p-min"
                                 data-style="outlined"
+                                th:aria-label="#{jobOffer.offerToSelected}"
                                 th:text="#{jobOffer.offerToSelected}"
                                 disabled></button>
                             <button
@@ -487,6 +508,7 @@
                                 class="button p-min"
                                 data-type="error"
                                 data-style="outlined"
+                                th:aria-label="#{jobOffer.rejectSelectedButton}"
                                 th:text="#{jobOffer.rejectSelectedButton}"
                                 disabled></button>
                             <th:block
@@ -513,6 +535,7 @@
                                 class="link"
                                 target="_blank"
                                 th:href="@{|/profile/${app.personId}|}"
+                                th:aria-label="|#{general.viewPerson.ariaLabel(${app.person.displayName})}|"
                                 th:text="${app.person.displayName}"></a>
                             <span th:if="${headTA}" class="chip" th:text="#{role.head_ta}"></span>
                         </div>
@@ -525,6 +548,7 @@
                             class="button p-min"
                             data-style="outlined"
                             th:data-dialog="|view-response-${app.personId}|"
+                            th:aria-label="#{application.viewContent}"
                             th:text="#{application.viewContent}"></button>
                         <span
                             th:if="${app.content == null}"
@@ -537,6 +561,7 @@
                         <a
                             class="link"
                             target="_blank"
+                            th:aria-label="#{jobOffer.queueFeedback.view}"
                             th:text="#{jobOffer.queueFeedback.view}"
                             th:href="|${@environment.getProperty('tam.queue-url')}/feedback/${app.personId}|"></a>
                     </td>
@@ -549,6 +574,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="accept"
+                                    th:aria-label="#{jobOffer.offer}"
                                     th:text="#{jobOffer.offer}"
                                     th:data-dialog="|confirm-offer-app-${app.personId}-overlay|"></button>
                                 <div th:replace="~{job_offer/confirm_offer_app :: overlay}"></div>
@@ -560,6 +586,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-type="accept"
+                                    th:aria-label="#{jobOffer.promote}"
                                     th:text="#{jobOffer.promote}"
                                     th:data-dialog="|confirm-promote-app-${app.personId}-overlay|"></button>
                                 <div th:replace="~{job_offer/confirm_promote_app :: overlay}"></div>
@@ -568,6 +595,7 @@
                                 <button
                                     class="button p-min"
                                     data-type="error"
+                                    th:aria-label="#{jobOffer.demote}"
                                     th:text="#{jobOffer.demote}"
                                     th:data-dialog="|confirm-demote-app-${app.personId}-overlay|"></button>
                                 <div th:replace="~{job_offer/confirm_demote_app :: overlay}"></div>
@@ -578,6 +606,7 @@
                                 <button
                                     class="button p-min"
                                     data-type="error"
+                                    th:aria-label="#{jobOffer.reject}"
                                     th:text="#{jobOffer.reject}"
                                     th:data-dialog="|confirm-reject-app-${app.personId}-overlay|"></button>
                                 <div th:replace="~{job_offer/confirm_reject_app :: overlay}"></div>
diff --git a/src/main/resources/templates/job_offer/view_reject_message.html b/src/main/resources/templates/job_offer/view_reject_message.html
index d66d000aeb896a67639b3c8fd337ad6ed736457e..4d3167169143020c47c825724501968632384019 100644
--- a/src/main/resources/templates/job_offer/view_reject_message.html
+++ b/src/main/resources/templates/job_offer/view_reject_message.html
@@ -37,6 +37,7 @@
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"
                         data-cancel></button>
                 </div>
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index 75140a2c97f3bee73a23fdd21ade0348f7273b77..fd41ce3790ca031e9d6145c9a1c8ca434bac01fe 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -33,13 +33,17 @@
                 <div
                     class="grid gap-3"
                     style="grid-template-columns: 5rem 15rem; align-items: center">
-                    <label for="username">Username</label>
+                    <label for="username" th:text="#{general.username}"></label>
                     <input type="text" class="textfield" id="username" name="username" />
-                    <label for="password">Password</label>
+                    <label for="password" th:text="#{general.password}"></label>
                     <input type="password" class="textfield" id="password" name="password" />
                 </div>
 
-                <button class="button" type="submit" th:text="#{general.login}"></button>
+                <button
+                    class="button"
+                    type="submit"
+                    th:text="#{general.login}"
+                    th:aria-label="#{general.login}"></button>
             </form>
         </main>
     </body>
diff --git a/src/main/resources/templates/pagination.html b/src/main/resources/templates/pagination.html
index 2796d937bee470c999317db220b73c1377946b36..ea76be34132d876b15c6a161b04656e11c9c1f52 100644
--- a/src/main/resources/templates/pagination.html
+++ b/src/main/resources/templates/pagination.html
@@ -23,7 +23,7 @@
     xmlns:th="http://www.thymeleaf.org"
     xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
     <nav
-        aria-label="Pagination"
+        th:aria-label="#{general.pagination}"
         class="pagination"
         layout:fragment="pagination(page, size)"
         th:data-page="${page.number}"
@@ -33,15 +33,15 @@
             <li th:data-disabled="${page.isFirst()}">
                 <button
                     th:if="${page.isFirst()}"
-                    aria-disabled="true"
+                    th:aria-disabled="true"
                     disabled
-                    aria-label="Previous Page">
+                    th:aria-label="#{general.pagination.previousPage}">
                     &laquo;
                 </button>
                 <button
                     th:unless="${page.isFirst()}"
                     th:data-page="${page.number - 1}"
-                    aria-label="Previous Page">
+                    th:aria-label="#{general.pagination.previousPage}">
                     &laquo;
                 </button>
             </li>
@@ -57,11 +57,11 @@
                         aria-current="page"
                         aria-disabled="true"
                         disabled
-                        th:aria-label="|Page ${pageNumber + 1}|"></button>
+                        th:aria-label="|#{general.pagination.page} ${pageNumber + 1}|"></button>
                     <button
                         th:unless="${pageNumber == page.number}"
                         th:text="${pageNumber + 1}"
-                        th:aria-label="|Page ${pageNumber + 1}|"
+                        th:aria-label="|#{general.pagination.page} ${pageNumber + 1}|"
                         th:data-page="${pageNumber}"></button>
                 </li>
             </th:block>
@@ -71,7 +71,12 @@
                 <!-- Triple Dots -->
                 <th:block th:if="${page.number > size - 1}">
                     <li>
-                        <button aria-disabled="true" disabled aria-label="Ellipsis">&mldr;</button>
+                        <button
+                            aria-disabled="true"
+                            disabled
+                            th:aria-label="#{general.pagination.ellipsis}">
+                            &mldr;
+                        </button>
                     </li>
                 </th:block>
 
@@ -86,11 +91,11 @@
                                 aria-current="page"
                                 aria-disabled="true"
                                 disabled
-                                th:aria-label="|Page ${pageNumber + 1}|"></button>
+                                th:aria-label="|#{general.pagination.page} ${pageNumber + 1}|"></button>
                             <button
                                 th:unless="${pageNumber == page.number}"
                                 th:text="${pageNumber + 1}"
-                                th:aria-label="|Page ${pageNumber + 1}|"
+                                th:aria-label="|#{general.pagination.page} ${pageNumber + 1}|"
                                 th:data-page="${pageNumber}"></button>
                         </li>
                     </th:block>
@@ -99,7 +104,12 @@
                 <!-- Triple Dots -->
                 <th:block th:if="${page.number + size <= page.totalPages - 1}">
                     <li>
-                        <button aria-disabled="true" disabled aria-label="Ellipsis">&mldr;</button>
+                        <button
+                            aria-disabled="true"
+                            disabled
+                            th:aria-label="#{general.pagination.ellipsis}">
+                            &mldr;
+                        </button>
                     </li>
                 </th:block>
             </th:block>
@@ -110,13 +120,13 @@
                     th:if="${page.isLast()}"
                     aria-disabled="true"
                     disabled
-                    aria-label="Next Page">
+                    th:aria-label="#{general.pagination.nextPage}">
                     &raquo;
                 </button>
                 <button
                     th:unless="${page.isLast()}"
                     th:data-page="${page.number + 1}"
-                    aria-label="Next Page">
+                    th:aria-label="#{general.pagination.nextPage}">
                     &raquo;
                 </button>
             </li>
diff --git a/src/main/resources/templates/person/search.html b/src/main/resources/templates/person/search.html
index 669ea0b3adeeb7a0cb1ec1724f29164313c2d865..6e1ef9505e7f7496768df2be1a2d271ec8beba70 100644
--- a/src/main/resources/templates/person/search.html
+++ b/src/main/resources/templates/person/search.html
@@ -37,11 +37,14 @@
                         <input
                             name="q"
                             class="search_field"
-                            aria-label="Student search"
+                            th:aria-label="#{general.search}"
                             type="search"
                             th:value="${param.q}"
                             th:placeholder="#{payscale.student_search}" />
-                        <button class="fa-solid fa-search" type="submit"></button>
+                        <button
+                            class="fa-solid fa-search"
+                            th:aria-label="#{general.search}"
+                            type="submit"></button>
                     </form>
                 </div>
             </div>
@@ -64,6 +67,7 @@
                                 target="_blank"
                                 th:href="@{|/profile/${person.getKey().id}|}"
                                 th:text="${person.getKey().displayName}"></a>
+                            th:aria-label="|#{general.viewPerson.ariaLabel(${person.getKey().displayName})}|"
                         </div>
                     </td>
                     <td th:text="${person.getKey().number}"></td>
@@ -74,6 +78,7 @@
                         <a
                             class="link"
                             target="_blank"
+                            th:aria-label="#{jobOffer.queueFeedback.view}"
                             th:text="#{jobOffer.queueFeedback.view}"
                             th:href="|${@environment.getProperty('tam.queue-url')}/feedback/${person.getKey().id}|"></a>
                     </td>
diff --git a/src/main/resources/templates/profile/create_raise_request.html b/src/main/resources/templates/profile/create_raise_request.html
index 41fc492027af9251b81fbf2788f77db452af0374..3beaa00aa8391fc4ea1d700008f66ca2cf5e63fc 100644
--- a/src/main/resources/templates/profile/create_raise_request.html
+++ b/src/main/resources/templates/profile/create_raise_request.html
@@ -70,11 +70,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{general.submit}"
                         th:text="#{general.submit}"></button>
                 </div>
             </form>
@@ -95,11 +97,13 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
                         type="submit"
                         class="button p-less"
+                        th:aria-label="#{profile.raiseRequest.retract}"
                         th:text="#{profile.raiseRequest.retract}"></button>
                 </div>
             </form>
diff --git a/src/main/resources/templates/profile/edit_notifications.html b/src/main/resources/templates/profile/edit_notifications.html
index 4fb0b4eb25cc5aa71bb43965d2f277f329dab0e4..b6f607cd39c3178c790299860bcdb897d5c4f7eb 100644
--- a/src/main/resources/templates/profile/edit_notifications.html
+++ b/src/main/resources/templates/profile/edit_notifications.html
@@ -65,9 +65,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/profile/edit_polo.html b/src/main/resources/templates/profile/edit_polo.html
index 883ae667df66df1d39c95ed6a3c12c052cb1691e..efc915132e6dccdaef92702bdf492d58db4be6c8 100644
--- a/src/main/resources/templates/profile/edit_polo.html
+++ b/src/main/resources/templates/profile/edit_polo.html
@@ -62,9 +62,14 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/profile/view.html b/src/main/resources/templates/profile/view.html
index f5580a1d9f7823685dff6fd9a857573d577fcd8b..f8548b310fab3d06c2f6ddebe9b710cbcf068721 100644
--- a/src/main/resources/templates/profile/view.html
+++ b/src/main/resources/templates/profile/view.html
@@ -43,6 +43,7 @@
                         <button
                             class="button"
                             data-style="outlined"
+                            th:aria-label="#{profile.polo.update}"
                             th:text="#{profile.polo.update}"
                             data-dialog="edit-polo-overlay"></button>
                     </div>
@@ -58,6 +59,7 @@
                         <button
                             class="button"
                             data-style="outlined"
+                            th:aria-label="#{profile.training.details.action}"
                             th:text="#{profile.training.details.action}"
                             data-dialog="view-training-details-overlay"></button>
                     </div>
@@ -71,6 +73,7 @@
                         <button
                             class="button"
                             data-style="outlined"
+                            th:aria-label="#{profile.notifications.update}"
                             th:text="#{profile.notifications.update}"
                             data-dialog="edit-email-notifications-overlay"></button>
                     </div>
@@ -85,6 +88,7 @@
                         <button
                             class="button"
                             data-style="outlined"
+                            th:aria-label="#{profile.payscale.update}"
                             th:text="#{profile.payscale.update}"
                             data-dialog="create-raise-request-overlay"
                             th:unless="${profile.payScale.equals(T(nl.tudelft.tam.enums.PayScale).SA4)}"></button>
@@ -113,6 +117,7 @@
                         <a
                             class="button"
                             data-style="outlined"
+                            th:aria-label="|#{payscale.download} #{profile.raiseRequest.fileProof}|"
                             th:text="|#{payscale.download} #{profile.raiseRequest.fileProof}|"
                             th:href="@{|/raise-request/${openRaiseRequest.id}/proof|}"></a>
                     </div>
diff --git a/src/main/resources/templates/profile/view_training_details.html b/src/main/resources/templates/profile/view_training_details.html
index 72d90c8201de9027fb4aff90fda14aedf8cc4b1e..83a0c8fbe9e0212ee6d2be6090cf33244f20f8f7 100644
--- a/src/main/resources/templates/profile/view_training_details.html
+++ b/src/main/resources/templates/profile/view_training_details.html
@@ -55,6 +55,7 @@
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"
                         data-cancel></button>
                 </div>
diff --git a/src/main/resources/templates/raise_request/import.html b/src/main/resources/templates/raise_request/import.html
index 299efbbad5379c74a7b655040e54a74b80e1029c..2ecbbb2fe1838a33532c39bbe1843bba8f77e750 100644
--- a/src/main/resources/templates/raise_request/import.html
+++ b/src/main/resources/templates/raise_request/import.html
@@ -111,6 +111,7 @@
                                 th:form="import-all"
                                 type="submit"
                                 class="button p-min"
+                                th:aria-label="#{payscale.import.all}"
                                 th:text="#{payscale.import.all}"></button>
                         </td>
                     </tr>
@@ -120,6 +121,7 @@
                                 class="link"
                                 target="_blank"
                                 th:href="@{|/profile/${student.getKey().getId()}|}"
+                                th:aria-label="|#{general.viewPerson.ariaLabel(${student.getKey().getDisplayName()})}|"
                                 th:text="${student.getKey().getDisplayName()}"></a>
                         </td>
                         <td th:text="${student.getKey().getUsername()}"></td>
@@ -135,6 +137,7 @@
                                         class="button p-min"
                                         data-style="outlined"
                                         th:form="|form-${student.getKey().getId()}|"
+                                        th:aria-label="#{payscale.import.approve}"
                                         th:text="#{payscale.import.approve}"></button>
                                 </form>
                             </div>
@@ -154,6 +157,7 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
                     <button
@@ -161,6 +165,7 @@
                         type="submit"
                         class="button p-less"
                         th:data-style="${foundPeople == null ? null : 'outlined'}"
+                        th:aria-label="#{general.search}"
                         th:text="#{general.search}"></button>
                 </div>
             </div>
diff --git a/src/main/resources/templates/raise_request/import_results.html b/src/main/resources/templates/raise_request/import_results.html
index 2a149df6a55da00109f7a50062e9ca7c3d872e81..b8b2fa449479001510eaabd6789a969cd5680459 100644
--- a/src/main/resources/templates/raise_request/import_results.html
+++ b/src/main/resources/templates/raise_request/import_results.html
@@ -55,6 +55,7 @@
                                         class="button p-min"
                                         data-style="outlined"
                                         th:form="|form-${student.getKey().getId()}|"
+                                        th:aria-label="#{payscale.import.conflict.overwrite}"
                                         th:text="#{payscale.import.conflict.overwrite}"></button>
                                 </form>
                             </div>
@@ -71,6 +72,7 @@
                         type="button"
                         class="button p-less"
                         data-type="error"
+                        th:aria-label="#{payscale.import.conflict.ignore}"
                         th:text="#{payscale.import.conflict.ignore}"
                         data-cancel></button>
                 </div>
diff --git a/src/main/resources/templates/raise_request/submitted.html b/src/main/resources/templates/raise_request/submitted.html
index fa3b86571492d7d1bc6784356620c5f2236c0070..710af4c237f3b6a9ad9d788a797f11854407df1c 100644
--- a/src/main/resources/templates/raise_request/submitted.html
+++ b/src/main/resources/templates/raise_request/submitted.html
@@ -35,17 +35,21 @@
                 <form class="search">
                     <input
                         name="q"
-                        aria-label="Student search"
+                        th:aria-label="#{general.search}"
                         type="search"
                         th:value="${param.q}"
                         th:placeholder="#{payscale.student_search}" />
-                    <button class="fa-solid fa-search" type="submit"></button>
+                    <button
+                        class="fa-solid fa-search"
+                        th:aria-label="#{general.search}"
+                        type="submit"></button>
                 </form>
             </div>
 
             <div>
                 <button
                     class="button"
+                    th:aria-label="#{payscale.import}"
                     th:text="#{payscale.import}"
                     data-dialog="import-overlay"></button>
             </div>
@@ -65,6 +69,7 @@
                             class="link"
                             target="_blank"
                             th:href="@{|/profile/${request.person.id}|}"
+                            th:aria-label="|#{general.viewPerson.ariaLabel(${request.person.displayName})}|"
                             th:text="${request.person.displayName}"></a>
                     </td>
                     <td th:text="${request.person.number}"></td>
@@ -73,6 +78,7 @@
                     <td>
                         <button
                             th:data-dialog="|request-${request.id}-overlay|"
+                            th:aria-label="#{raiseRequest.view}"
                             th:text="#{raiseRequest.view}"
                             class="button p-min"></button>
                     </td>
@@ -85,6 +91,7 @@
                                     type="submit"
                                     class="button p-min"
                                     data-style="outlined"
+                                    th:aria-label="#{general.approve}"
                                     th:text="#{general.approve}"></button>
                             </form>
                             <form
@@ -95,6 +102,7 @@
                                     class="button p-min"
                                     data-style="outlined"
                                     data-type="error"
+                                    th:aria-label="#{general.reject}"
                                     th:text="#{general.reject}"></button>
                             </form>
                         </div>
diff --git a/src/main/resources/templates/raise_request/view.html b/src/main/resources/templates/raise_request/view.html
index 472735c2951ff7eae85a78c1a38bb77ef59a2479..db868c13369fdcb3bdd8fcfaf5ee60aac748c8bd 100644
--- a/src/main/resources/templates/raise_request/view.html
+++ b/src/main/resources/templates/raise_request/view.html
@@ -44,10 +44,12 @@
                     height="500px"
                     style="min-width: 75vw; min-height: calc(90vh - 12rem)">
                     <div class="flex vertical">
-                        <p>Cannot display PDF.</p>
-                        <a th:href="@{/raise-request/{id}/proof(id=${request.id})}" class="button">
-                            Download instead
-                        </a>
+                        <p th:text="#{raiseRequest.error}"></p>
+                        <a
+                            th:href="@{/raise-request/{id}/proof(id=${request.id})}"
+                            class="button"
+                            th:aria-label="#{raiseRequest.error.alternative}"
+                            th:text="#{raiseRequest.error.alternative}"></a>
                     </div>
                 </object>
 
@@ -57,6 +59,7 @@
                             type="submit"
                             class="button p-less"
                             data-type="error"
+                            th:aria-label="#{general.reject}"
                             th:text="#{general.reject}"></button>
                     </form>
                     <form th:action="@{|/raise-request/approve/${request.id}|}" method="post">
@@ -64,6 +67,7 @@
                             type="submit"
                             class="button p-less"
                             data-type="accept"
+                            th:aria-label="#{general.approve}"
                             th:text="#{general.approve}"></button>
                     </form>
                 </div>
diff --git a/src/main/resources/templates/training_approval/import.html b/src/main/resources/templates/training_approval/import.html
index b4827c2c49a1a59a72972779198d84cc7a261a91..a032d0a3adc4f386ac72295b091960f86fc4252e 100644
--- a/src/main/resources/templates/training_approval/import.html
+++ b/src/main/resources/templates/training_approval/import.html
@@ -131,6 +131,7 @@
                                     th:form="import-training-all"
                                     type="submit"
                                     class="button p-min"
+                                    th:aria-label="#{training.import.all}"
                                     th:text="#{training.import.all}"></button>
                             </div>
                         </td>
@@ -141,6 +142,7 @@
                                 class="link"
                                 target="_blank"
                                 th:href="@{|/profile/${student.getKey().getId()}|}"
+                                th:aria-label="|#{general.viewPerson.ariaLabel(${student.getKey().getDisplayName()})}|"
                                 th:text="${student.getKey().getDisplayName()}"></a>
                         </td>
                         <td th:text="${student.getKey().getUsername()}"></td>
@@ -160,6 +162,7 @@
                                     class="button p-min"
                                     data-style="outlined"
                                     th:form="|form-${student.getKey().getId()}|"
+                                    th:aria-label="#{training.import.specific}"
                                     th:text="#{training.import.specific}"></button>
                             </form>
                         </td>
@@ -178,6 +181,7 @@
                         type="button"
                         class="button p-less"
                         data-style="outlined"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel=""></button>
                     <button
@@ -185,6 +189,7 @@
                         type="submit"
                         class="button p-less"
                         th:data-style="${foundPeople == null ? null : 'outlined'}"
+                        th:aria-label="#{general.search}"
                         th:text="#{general.search}"></button>
                 </div>
             </div>
diff --git a/src/main/resources/templates/training_approval/import_csv.html b/src/main/resources/templates/training_approval/import_csv.html
index a2bbb69733ffd2c33505f44657d7cdbb5a83db30..07a77887b6634d974f065cf91cbce28fe906dd04 100644
--- a/src/main/resources/templates/training_approval/import_csv.html
+++ b/src/main/resources/templates/training_approval/import_csv.html
@@ -49,6 +49,7 @@
                     <a
                         id="templateDownload"
                         class="button"
+                        th:aria-label="#{general.download}"
                         th:text="#{general.download}"
                         th:href="@{/training-approval/import/template}"></a>
                 </div>
@@ -64,9 +65,14 @@
                         class="button p-less"
                         data-style="outlined"
                         data-type="error"
+                        th:aria-label="#{general.cancel}"
                         th:text="#{general.cancel}"
                         data-cancel></button>
-                    <button type="submit" class="button p-less" th:text="#{general.save}"></button>
+                    <button
+                        type="submit"
+                        class="button p-less"
+                        th:aria-label="#{general.save}"
+                        th:text="#{general.save}"></button>
                 </div>
             </form>
         </dialog>
diff --git a/src/main/resources/templates/training_approval/import_results.html b/src/main/resources/templates/training_approval/import_results.html
index 89b40de585898d8a96ca5717f928b24962daa6e2..bac7c14a01f73fe500b84cdef0b4736cbc0fe54b 100644
--- a/src/main/resources/templates/training_approval/import_results.html
+++ b/src/main/resources/templates/training_approval/import_results.html
@@ -38,6 +38,7 @@
                     <button
                         type="button"
                         class="button p-less"
+                        th:aria-label="#{general.close}"
                         th:text="#{general.close}"
                         data-cancel></button>
                 </div>