June diplomatic marathon: Ruto sets off on high-level visits to South Africa, Belgium, Finland and France
June diplomatic marathon: Ruto sets off on high-level visits to South Africa, Belgium, Finland and France
Read this story aloud
Listen to the clean text version of this article
Ready
3 min listen
Audio reading is not supported on this browser.
From South Africa, the Kenyan leader is expected to travel to Belgium for talks with King Philippe at the Royal Palace in Brussels on June 8 as part of efforts to deepen bilateral cooperation between Nairobi and Brussels
President William Ruto is beginning a packed diplomatic schedule this month with a state visit to South Africa, where he is expected to hold bilateral talks with President Cyril Ramaphosa to strengthen relations between two of Africa’s leading economies.
Ruto, who arrived in South Africa on Wednesday will be formally hosted by President Cyril Ramaphosa for bilateral talks on Thursday.
From South Africa, the Kenyan leader is expected to travel to Belgium for talks with King Philippe at the Royal Palace in Brussels on June 8 as part of efforts to deepen bilateral cooperation between Nairobi and Brussels.
More To Read
- DP Kindiki hails cooperatives as key to Kenya’s economic transformation
- Ramaphosa in DR Congo as Africa races to contain expanding Ebola outbreak
- Civil society groups warn Kenya’s Sh13 trillion debt hurting essential services
- Court grants DCI three more days to hold woman over alleged posts tracking President Ruto’s flights
- Construction of Naivasha–Kisumu–Malaba SGR begins in Narok
- How the new Ngong Road flyover is fueling growth at Dagoretti Corner
It remains unclear whether Ruto will return to Nairobi after the South Africa visit or proceed directly to Europe ahead of the Belgian engagement.
The president’s European itinerary will then take him to Finland for a state visit on June 10-11 at the invitation of President Alexander Stubb.
The visit will be the first by Ruto to the Nordic country and follows Stubb’s state visit to Kenya in 2025.
Latest Stories
- Study finds intermittent fasting helps maintain weight loss for at least a year
- Busia school named among global finalists for 2026 education prize
- DP Kindiki hails cooperatives as key to Kenya’s economic transformation
- SHA seeks Treasury funds to clear NHIF claims above Sh10 million
It will also mark the first state visit by a Kenyan president to Finland since former President Daniel arap Moi travelled to the country in 1987.
According to the Finnish presidency, discussions will focus on strengthening bilateral relations, expanding trade and investment, reforming multilateral institutions and enhancing cooperation in international affairs.
“In addition to bilateral relations, the topics will cover multilateral cooperation, the development of the UN system and mediation, regional issues in Africa and Europe, the situation in the Middle East, and the promotion of trade between Finland and Kenya,” the Finnish presidency said in a statement.
The Finland visit comes days after Ruto cited the country during Madaraka Day celebrations as an example of a successful transition to a knowledge-driven economy.
The Kenyan leader is then expected to travel to France for the G7 Summit scheduled for June 15-17 in Évian-les-Bains, where global leaders will discuss economic, security and geopolitical challenges.
The series of engagements highlights Kenya’s growing diplomatic activism as Nairobi seeks to deepen ties with key partners across Africa and Europe while advancing its role in regional and global affairs.
Other Topics To Read
Top Stories Today
- Study finds intermittent fasting helps maintain weight loss for at least a year
- Busia school named among global finalists for 2026 education prize
- DP Kindiki hails cooperatives as key to Kenya’s economic transformation
- SHA seeks Treasury funds to clear NHIF claims above Sh10 million
- Eight arrested in Marsabit over Sh1.2 million SIM swap fraud
- What the World Cup hydration breaks reveal about who governs men’s football
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
Eight arrested in Marsabit over Sh1.2 million SIM swap fraudNorthern Kenya
|Bashir Mbuthia
|2 hours ago
Study finds intermittent fasting helps maintain weight loss for at least a yearHealth
|Charity Kilei
|22 minutes ago
UK, France agree with Oman on multinational military mission to secure Strait of HormuzNews
|Mary Wambui
|6 hours ago
Families of Ethiopians on Saudi death row gripped by fear as executions loomRegional
|Addis Standard
|4 hours ago
DP Kindiki hails cooperatives as key to Kenya’s economic transformationNews
|Rachael Mutabasi
|1 hour ago
What Kenya’s record Sh1.82 trillion forex reserves mean for the economyBusiness
|Alfred Onyango
|7 hours ago
IGAD pushes regional action to tackle plastic pollutionNews
|Rachael Mutabasi
|6 hours ago
Iran begins six-day funeral for late Supreme Leader Ali KhameneiWorld
|DW News
|9 hours ago
Government reaffirms commitment to inclusive development across all regionsNews
|Mary Wambui
|4 hours ago
CAF opens bidding for 2028, 2032 and 2036 AFCON tournamentsNews
|Erick Kariuki
|8 hours ago
